如何在 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}
注意
有一个 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 请求。 实现此目的的方法之一是在线捕获请求,然后手动将其重新发送到本地计算机:
- 创建查看器 Web 应用,用于捕获事件消息。
- 创建事件网格订阅,用于向查看器应用发送事件。
- 生成请求,并从查看器应用复制请求正文。
- 将请求手动发布到事件网格触发器函数的 localhost URL。
若要发送 HTTP 发布请求,你需要一个 HTTP 测试工具。 请确保选择一个可保护数据安全的工具。 有关详细信息,请参阅 HTTP 测试工具。
完成测试后,可以更新终结点,将同一订阅用于生产。 使用 az eventgrid event-subscription update
Azure CLI 命令。
创建查看器 Web 应用
若要简化事件消息捕获,可部署用于显示事件消息的预建 Web 应用。 所部署的解决方案包括应用服务计划、应用服务 Web 应用和 GitHub 中的源代码。
选择“部署到 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 应用中显示请求后,请复制请求正文。
首先会接收订阅验证请求,忽略任何验证请求,并复制事件请求。
手动发布请求
在本地运行事件网格函数。 需要手动设置 Content-Type
和 aeg-event-type
标头,而其他所有值都可以保留为默认值。
使用 HTTP 测试工具创建 HTTP POST 请求:
设置
Content-Type: application/json
标头。设置
aeg-event-type: Notification
标头。将 RequestBin 数据粘贴到请求正文。
将 HTTP POST 请求发送到手动启动事件网格触发器的终结点。
functionName
参数必须是在 FunctionName
特性中指定的名称。
事件网格触发器函数将会执行,并显示类似于以下示例的日志:
后续步骤
若要详细了解事件网格和 Functions,请参阅以下文章: