如何在 Azure Functions 中使用事件网格触发器和绑定

Azure Functions 使用触发器和绑定提供与 Azure 事件网格的内置集成。 本文介绍如何配置以及在本地评估 Event Grid 触发器和绑定。 有关事件网格触发器和输出绑定定义和示例的详细信息,请参阅以下参考文章之一:

创建事件订阅

若要开始接收事件网格 HTTP 请求,需要订阅事件网格引发的事件。 事件订阅指定用于调用函数的终结点 URL。 从 Azure 门户中函数的“集成”选项卡创建事件订阅时,会为你提供 URL。 以编程方式创建事件订阅或从事件网格创建事件订阅时,需要提供终结点。 终结点 URL 包含一个系统密钥,必须通过 Functions 管理员 REST API 获取该密钥。

获取 Webhook 终结点 URL

以下示例展示了事件网格触发函数的URL模式:

https://{functionappname}.chinacloudsites.cn/runtime/webhooks/eventgrid?functionName={functionname}&code={systemkey}

注意

有一个 Blob 存储触发器版本也使用事件订阅。 此类 Blob 存储触发器的终结点 URL 的路径为 /runtime/webhooks/blobs,而事件网格触发器的路径为 /runtime/webhooks/EventGrid。 有关用于处理 Blob 的选项的比较,请参阅对 Blob 容器触发。

获取系统密钥

构建的 URL 终结点包括系统密钥值。 系统密钥是特定于事件网格 Webhook 的授权密钥,必须包含在对事件网格触发器的终结点 URL 发出的请求中。 以下部分介绍如何获取系统密钥。

还可以从门户中的函数应用>应用密钥获取函数应用的主密钥。

注意

主密钥提供对函数应用的管理员访问权限。 不要与第三方共享此密钥或将其分发到原生客户端应用程序中。

有关详细信息,请参阅在 Azure Functions 中使用访问密钥。

可以使用以下管理员 API (HTTP GET) 从函数应用获取系统密钥:

http://{functionappname}.chinacloudsites.cn/admin/host/systemkeys/eventgrid_extension?code={masterkey}

此 REST API 是一个管理员 API,因此它需要你的函数应用主密钥。 请不要混淆系统密钥(用于调用事件网格触发器函数)和主密钥(用于针对函数应用执行管理任务)。 订阅事件网格主题时,请务必使用系统密钥。

下面是提供系统密钥的响应示例:

{
  "name": "eventgridextensionconfig_extension",
  "value": "{the system key for the function}",
  "links": [
    {
      "rel": "self",
      "href": "{the URL for the function, without the system key}"
    }
  ]
}

创建订阅

可以从 Azure 门户或使用 Azure CLI 创建事件订阅。

对于在 Azure 门户中使用事件网格触发器开发的函数,请选择“集成”,然后选择“事件网格触发器”并选择“创建事件网格订阅”。

连接到要在门户中触发的新建事件订阅的屏幕截图。

选择此链接时,门户将打开“创建事件订阅”页,其中已定义了当前触发器终结点。

使用已定义的函数终结点创建事件订阅的屏幕截图。

有关如何使用 Azure 门户创建订阅的详细信息,请参阅事件网格文档中的创建自定义事件 - Azure 门户。

有关如何创建订阅的详细信息,请参阅 Blob 存储快速入门或其他事件网格快速入门。

使用查看器 Web 应用进行本地测试

若要在本地测试事件网格触发器,必须使事件网格 HTTP 请求从云中的源传送到本地计算机。 实现此目的的方法之一是在线捕获请求,然后手动将其重新发送到本地计算机:

  1. 创建查看器 Web 应用,用于捕获事件消息。
  2. 创建 Event Grid 订阅,用于向查看器应用发送事件。
  3. 生成请求,并从查看器应用复制请求正文。
  4. 将请求手动发布到事件网格触发器函数的 localhost URL。

若要发送 HTTP POST 请求,你需要一个 HTTP 测试工具。 请确保选择一个可保护数据安全的工具。 有关详细信息,请参阅 HTTP 测试工具。

完成测试后,可以更新终结点,将同一订阅用于生产。 使用 az eventgrid event-subscription update Azure CLI 命令。

创建查看器 Web 应用

若要简化事件消息捕获,可部署用于显示事件消息的预建 Web 应用。 所部署的解决方案包括应用服务计划、应用服务 Web 应用和 GitHub 中的源代码。

选择部署到 Azure以将解决方案部署到你的订阅。 在 Azure 门户中,为参数提供值。

部署到 Azure。

部署可能需要几分钟才能完成。 部署成功后,请查看 Web 应用以确保它正在运行。 在 Web 浏览器中导航到 https://<your-site-name>.chinacloudsites.cn

您可以看到该站点,但尚未有事件发布到该站点。

查看新站点

创建事件网格订阅

创建要测试的类型的事件网格订阅,并将 Web 应用中的 URL 作为事件通知的终结点。 Web 应用的终结点必须包括后缀 /api/updates/。 因此,完整的 URL 是 https://<your-site-name>.chinacloudsites.cn/api/updates

有关如何使用 Azure 门户创建订阅的信息,请参阅事件网格文档中的 创建自定义事件订阅 - Azure 门户。

生成请求

触发一个事件,以便向你的 Web 应用终结点发送 HTTP 流量。 例如,如果创建了 Blob 存储,请上传或删除一个 Blob。 Web 应用中显示请求后,请复制请求正文。

首先会接收订阅验证请求;忽略任何验证请求,并保存该事件请求内容。

从 Web 应用复制请求正文

手动提交请求

在本地运行 Event Grid 函数。 需要手动设置 Content-Type 和 aeg-event-type 标头,而所有其他值都可以保留为默认值。

使用 HTTP 测试工具创建 HTTP POST 请求:

  • 设置 Content-Type: application/json 标头。

  • 设置 aeg-event-type: Notification 标头。

  • 将 RequestBin 数据粘贴到请求正文。

  • 将 HTTP POST 请求发送到手动启动事件网格触发器的终结点。

    http://localhost:7071/runtime/webhooks/eventgrid?functionName={FUNCTION_NAME}
    

functionName 参数必须是在 FunctionName 特性中指定的名称。

事件网格触发器函数将会执行,并显示类似于以下示例的日志:

事件网格触发器函数日志示例

后续步骤

若要详细了解事件网格与 Functions 配合使用,请参阅以下文章: