你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

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

事件订阅

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

Webhook 终结点 URL

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

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

注意

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

系统密钥

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

可以使用以下 API (HTTP GET) 获取系统密钥:

http://{functionappname}.azurewebsites.net/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 门户中使用事件网格触发器开发的函数,请选择“集成”,然后选择“事件网格触发器”并选择“创建事件网格订阅”。

Screenshot of connecting to a new event subscription to trigger in the portal.

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

Screenshot of creating an event subscription with the function endpoint already defined.

有关如何使用 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 门户中,为参数提供值。

Button to deploy the Resource Manager template to Azure.

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

查看站点,但是尚未有事件发布到它。

View new site

创建事件网格订阅

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

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

生成请求

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

首先会接收订阅验证请求,忽略任何验证请求,并复制事件请求。

Copy request body from web app

手动发布请求

在本地运行事件网格函数。 需要手动设置 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 中的标头和请求正文:

Headers in Postman

Request body in Postman

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

Sample Event Grid trigger function logs

后续步骤

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