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 创建事件订阅。
- Portal
- Azure CLI
对于在 Azure 门户中使用事件网格触发器开发的函数,请选择“集成”,然后选择“事件网格触发器”并选择“创建事件网格订阅”。
选择此链接时,门户将打开“创建事件订阅”页,其中已定义了当前触发器终结点。
有关如何使用 Azure 门户创建订阅的详细信息,请参阅事件网格文档中的创建自定义事件 - Azure 门户。
有关如何创建订阅的详细信息,请参阅 Blob 存储快速入门或其他事件网格快速入门。
使用查看器 Web 应用进行本地测试
若要在本地测试事件网格触发器,必须使事件网格 HTTP 请求从云中的源传送到本地计算机。 实现此目的的方法之一是在线捕获请求,然后手动将其重新发送到本地计算机:
- 创建查看器 Web 应用,用于捕获事件消息。
- 创建 Event Grid 订阅,用于向查看器应用发送事件。
- 生成请求,并从查看器应用复制请求正文。
- 将请求手动发布到事件网格触发器函数的 localhost URL。
若要发送 HTTP POST 请求,你需要一个 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 应用中显示请求后,请复制请求正文。
首先会接收订阅验证请求;忽略任何验证请求,并保存该事件请求内容。
手动提交请求
在本地运行 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 配合使用,请参阅以下文章: