你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
教程:将事件转接到事件网格云
本文逐步讲解将边缘事件转接到 Azure 云中的事件网格所需的所有步骤。 你可能需要执行此操作的原因如下:
- 响应云中的边缘事件。
- 将事件转接到云中的事件网格,并使用 Azure 事件中心或 Azure 存储队列来缓冲事件,然后在云中处理事件。
若要完成本教程,你需要理解有关边缘和 Azure 的事件网格概念。 有关其他目标类型,请参阅事件处理程序。
重要
2023 年 3 月 31 日,Azure IoT Edge 上的事件网格支持将终止,因此请确保在该日期之前过渡到 IoT Edge 本机功能。 有关详细信息,请参阅从 Azure IoT Edge 上的事件网格过渡到 Azure IoT Edge。
先决条件
若要完成本教程,您需要:
- Azure 订阅 - 创建免费帐户(如果还没有的话)。
- Azure IoT 中心和 IoT Edge 设备 - 按照 Linux 或 Windows 设备快速入门中的步骤操作(如果还没有这样做的话)。
部署事件网格 IoT Edge 模块
有多种方法可以将模块部署到 IoT Edge 设备,并且所有这些方法都适用于 IoT Edge 上的 Azure 事件网格。 本文介绍从 Azure 门户部署 IoT Edge 上的事件网格的步骤。
注意
在本教程中,将部署不带持久性的事件网格模块。 这意味着,本教程中创建的任何主题和订阅都将在重新部署模块时被删除。 有关如何设置持久性的详细信息,请参阅以下文章:Linux 中的持久状态或 Windows 中的持久状态。 对于生产工作负载,建议安装带有持久性的事件网格模块。
重要
在本教程中,将在客户端身份验证关闭的情况下部署事件网格模块,并允许 HTTP 订阅服务器。 对于生产工作负载,建议仅启用启用了客户端身份验证的 HTTPS 请求和订阅服务器。 有关如何安全配置事件网格模块的详细信息,请参阅安全性和身份验证。
选择 IoT Edge 设备
- 登录到 Azure 门户
- 导航到 IoT 中心。
- 从“自动设备管理”部分的菜单中选择“IoT Edge” 。
- 在设备列表中单击目标设备的 ID
- 选择“设置模块” 。 请将页面保持打开状态。 将在该页面继续执行下一部分中的步骤。
配置部署清单
部署清单是一个 JSON 文档,其中描述了要部署的模块、数据在模块间的流动方式以及模块孪生的所需属性。 Azure 门户提供部署清单的创建向导,无需你手动构建 JSON 文档。 它分为三步:添加模块、指定路由和评审部署 。
添加模块
- 在“部署模块”部分,选择“添加”
- 从下拉列表的模块类型中选择“IoT Edge 模块”
- 提供容器的名称、映像、容器创建选项:
注意
请始终检查映像的版本,确保其具有所需的功能。 如果在计算机上已拉取以前版本的容器映像,则需要指定所需的版本标记,或在使用 :latest
标记再次拉取之前删除现有映像。 有关映像版本和标记的详细信息,请参阅发行说明。
- 名称:eventgridmodule
- 映像 URI:
mcr.microsoft.com/azure-event-grid/iotedge:latest
- 容器创建选项:
{
"Env": [
"inbound__clientAuth:clientCert__enabled=false",
"outbound__webhook__httpsOnly=false"
],
"HostConfig": {
"PortBindings": {
"4438/tcp": [
{
"HostPort": "4438"
}
]
}
}
}
单击“保存”
单击“下一步”转到路由部分
注意
如果使用 Azure VM 作为边缘设备,请添加入站端口规则以允许端口 4438 上有入站流量。 有关添加规则的说明,请参阅如何打开 VM 的端口。
设置路由
保留默认路由,然后选择“下一步”,转到评审部分
评审部署
- 评审部分介绍了根据上述两部分中的选择所创建的 JSON 部署清单。 确认列表中显示了两个模块:$edgeAgent 和 $edgeHub 。 这两个模块构成 IoT Edge 运行时,并且是每个部署中所需的默认模块。
- 审阅部署信息,然后选择“提交”。
验证部署
- 提交部署后,返回到 IoT 中心的“IoT Edge”页。
- 选择用作部署目标的“IoT Edge 设备”,以打开其详细信息。
- 在设备详细信息中,验证事件网格模块是否已列为“在部署中指定”和“由设备报告” 。
可能需要等待一段时间,该模块才会在设备上启动并向 IoT 中心发回报告。 刷新页面以查看更新的状态。
在云中创建事件网格主题和订阅
按照本教程的说明,在云中创建事件网格主题和订阅。 记录新创建主题的 topicURL
、sasKey
和 topicName
,本教程稍后将使用。
例如,如果你在“美国西部”中创建了一个名为 testegcloudtopic
的主题,则这些值将如下所示:
- “TopicUrl”:
https://testegcloudtopic.westus2-1.eventgrid.azure.net/api/events
- “TopicName”:
testegcloudtopic
- “SasKey”:在主题的“AccessKey”下提供。 使用“key1”。
在边缘创建事件网格主题
创建包含以下内容的 topic3.json。 有关有效负载的详细信息,请参阅 API 文档。
{ "name": "sampleTopic3", "properties": { "inputschema": "eventGridSchema" } }
运行下面的命令来创建主题。 应返回 HTTP 状态代码 200 OK。
curl -k -H "Content-Type: application/json" -X PUT -g -d @topic3.json https://<your-edge-device-public-ip-here>:4438/topics/sampleTopic3?api-version=2019-01-01-preview
运行下面的命令,以验证主题是否已成功创建。 应返回 HTTP 状态代码 200 OK。
curl -k -H "Content-Type: application/json" -X GET -g https://<your-edge-device-public-ip-here>:4438/topics/sampleTopic3?api-version=2019-01-01-preview
示例输出:
[ { "id": "/iotHubs/eg-iot-edge-hub/devices/eg-edge-device/modules/eventgridmodule/topics/sampleTopic3", "name": "sampleTopic3", "type": "Microsoft.EventGrid/topics", "properties": { "endpoint": "https://<edge-vm-ip>:4438/topics/sampleTopic3/events?api-version=2019-01-01-preview", "inputSchema": "EventGridSchema" } } ]
在边缘创建事件网格订阅
注意
如果需要确保在设备重启时挂起的事件得以保留,则需要为事件订阅启用暂留。 有关如何设置暂留的详细信息,请参阅以下文章:Linux 中的保留状态或 Windows 中的保留状态。
创建包含以下内容的 subscription3.json。 有关有效负载的详细信息,请参阅 API 文档。
{ "properties": { "destination": { "endpointType": "eventGrid", "properties": { "endpointUrl": "<your-event-grid-cloud-topic-endpoint-url>?api-version=2018-01-01", "sasKey": "<your-event-grid-topic-saskey>", "topicName": null } } } }
注意
“endpointUrl” 指定云中的事件网格主题 URL。 “sasKey”是指事件网格云主题的键。 “topicName”中的值将用于将所有传出事件标记到事件网格。 在发布到事件网格域主题时,这可能很有用。 有关事件网格域主题的详细信息,请参阅事件域
例如,
{ "properties": { "destination": { "endpointType": "eventGrid", "properties": { "endpointUrl": "https://testegcloudtopic.westus2-1.eventgrid.azure.net/api/events?api-version=2018-01-01", "sasKey": "<your-event-grid-topic-saskey>", "topicName": null } } } }
运行以下命令以创建订阅。 应返回 HTTP 状态代码 200 OK。
curl -k -H "Content-Type: application/json" -X PUT -g -d @subscription3.json https://<your-edge-device-public-ip-here>:4438/topics/sampleTopic3/eventSubscriptions/sampleSubscription3?api-version=2019-01-01-preview
运行下面的命令,以验证订阅是否已成功创建。 应返回 HTTP 状态代码 200 OK。
curl -k -H "Content-Type: application/json" -X GET -g https://<your-edge-device-public-ip-here>:4438/topics/sampleTopic3/eventSubscriptions/sampleSubscription3?api-version=2019-01-01-preview
示例输出:
{ "id": "/iotHubs/eg-iot-edge-hub/devices/eg-edge-device/modules/eventgridmodule/topics/sampleTopic3/eventSubscriptions/sampleSubscription3", "type": "Microsoft.EventGrid/eventSubscriptions", "name": "sampleSubscription3", "properties": { "Topic": "sampleTopic3", "destination": { "endpointType": "eventGrid", "properties": { "endpointUrl": "https://testegcloudtopic.westus2-1.eventgrid.azure.net/api/events?api-version=2018-01-01", "sasKey": "<your-event-grid-topic-saskey>", "topicName": null } } } }
在边缘发布事件
创建包含以下内容的 event3.json。 有关有效负载的详细信息,请参阅 API 文档。
[ { "id": "eventId-egcloud-0", "eventType": "recordInserted", "subject": "myapp/vehicles/motorcycles", "eventTime": "2019-07-28T21:03:07+00:00", "dataVersion": "1.0", "data": { "make": "Ducati", "model": "Monster" } } ]
运行下面的命令:
curl -k -H "Content-Type: application/json" -X POST -g -d @event3.json https://<your-edge-device-public-ip-here>:4438/topics/sampleTopic3/events?api-version=2019-01-01-preview
验证云中的边缘事件
有关查看由云主题传递的事件的信息,请参阅教程。
清理资源
运行以下命令以删除主题及其所有订阅
curl -k -H "Content-Type: application/json" -X DELETE https://<your-edge-device-public-ip-here>:4438/topics/sampleTopic3?api-version=2019-01-01-preview
同时删除在云(Azure 事件网格)中创建的主题和订阅。
后续步骤
在本教程中,你在边缘上发布事件,并将其转接到 Azure 云中的事件网格。 现在,你已经了解了转接到云中事件网格的基本步骤:
- 若要排查与在 IoT Edge 上使用 Azure 事件网格相关的问题,请参阅故障排除指南。
- 遵循本教程将事件转接到 IoTHub
- 遵循本教程将事件转接到云中的 Webhook
- 监视边缘上的主题和订阅