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

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

事件订阅

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

Webhook 终结点 URL

事件网格触发函数的 URL 终结点取决于 Functions 运行时的版本。 以下示例显示特定于版本的 URL 模式:

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

系统密钥

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

可以使用以下 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}"
    }
  ]
}

可以从门户中的“函数应用设置”选项卡获取函数应用的主密钥。

重要

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

有关详细信息,请参阅 HTTP 触发器参考文章中的授权密钥

创建事件订阅

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

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

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

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

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

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

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

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

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

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

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

还可以使用 ngrok 实用工具将远程请求转发到本地运行的函数。 有关详细信息,请参阅此教程

创建查看器 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 应用复制请求正文

手动发布请求

在本地运行事件网格函数。 需要手动设置 Content-Typeaeg-event-type 标头,而其他所有值都可以保留为默认值。

使用 Postmancurl 等工具创建 HTTP POST 请求:

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

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

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

  • 发布到事件网格触发器函数的 URL。

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

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

以下屏幕截图显示了 Postman 中的标头和请求正文:

Postman 中的标头

Postman 中的请求正文

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

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

后续步骤

若要详细了解事件网格和 Functions,请参阅以下文章: