使用 Azure Cosmos DB 将来自 Azure IoT 中心的设备连接事件排序
借助 Azure 事件网格,可以生成基于事件的应用程序,并轻松地在业务解决方案中集成 IoT 事件。 本文将指导你完成一项使用 Cosmos DB、逻辑应用、IoT 中心事件和模拟 Raspberry Pi 的设置,以收集和存储设备连接与断开连接事件。
从设备运行的那一刻起,就会激活以下操作顺序:
启动然后停止使用 IoT 中心设备密钥的 Pi 设备
IoT 中心事件捕获设备活动,然后向逻辑应用发送 HTTP 请求
逻辑应用根据设置的条件处理 HTTP 请求
逻辑应用将连接或断开连接事件记录到 Cosmos DB 上的新文档中
先决条件
有效的 Azure Cosmos DB for NoSQL 帐户。 如果尚未创建此帐户,请参阅创建数据库帐户中的演练。
数据库中的集合。 请参阅添加集合中的演练。 创建集合时,请对分区键使用
/id
。Azure 订阅。 如果还没有 Azure 订阅,可以在开始前创建一个免费帐户。
Azure 订阅中的 IoT 中心。 如果还没有中心,则可以按照创建 IoT 中心中的步骤进行操作。
创建逻辑应用
让我们创建一个逻辑应用并添加事件网格触发器,以便监视虚拟机的资源组。
创建逻辑应用资源
在 Azure 门户中,依次选择“+创建资源”、“集成”、“逻辑应用”。
填写窗体以创建新的逻辑应用,其中包括:
你的订阅
你的资源组(或新建一个)
在你的订阅中唯一的逻辑应用名称
你的 IoT 中心所在的区域
是否启用 Log Analytics 的“否”选项
“消耗”计划类型
注意
“消耗”计划类型是用于在 UI 中启用“逻辑应用设计器”的选项。 如果选择“标准”(默认设置),则必须创建一个新的工作流才能使“逻辑应用设计器”可用。
选择“查看 + 创建”以查看配置,然后选择“创建”以创建逻辑应用。
你现在已为逻辑应用程序创建 Azure 资源。 在 Azure 部署逻辑应用后,选择“转到资源”。 “逻辑应用设计器”会显示常用模式的模板,以便你可以更快地开始操作。
在“逻辑应用设计器”中滚动到“模板”部分,然后选择“空白逻辑应用”,这样就可以从头开始生成逻辑应用。
选择触发器
触发器是启动逻辑应用的特定事件。 在本教程中,触发工作流的触发器通过 HTTP 接收请求。
在连接器和触发器搜索栏中,键入 HTTP 并按 Enter。
选择请求“当收到 HTTP 请求时”作为触发器。
选择“使用示例有效负载生成架构”。
在文本框中粘贴以下示例 JSON 代码,然后选择“完成”。
此 JSON 仅用作模板,因此确切的值并不重要。
[{ "id": "fbfd8ee1-cf78-74c6-dbcf-e1c58638ccbd", "topic": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/EGTESTRG/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/MYIOTHUB", "subject": "devices/Demo-Device-1", "eventType": "Microsoft.Devices.DeviceConnected", "eventTime": "2018-07-03T23:20:11.6921933+00:00", "data": { "deviceConnectionStateEventInfo": { "sequenceNumber": "000000000000000001D4132452F67CE200000002000000000000000000000001" }, "hubName": "MYIOTHUB", "deviceId": "48e44e11-1437-4907-83b1-4a8d7e89859e", "moduleId": "" }, "dataVersion": "1", "metadataVersion": "1" }]
创建条件
在满足特定的条件后,该条件可帮助运行特定的操作。 在本文中,条件是检查 eventType 是设备已连接还是设备已断开连接。 当 eventType 为 true 时执行的操作是在 Azure Cosmos DB 中创建文档。 此条件是在“逻辑应用设计器”中创建的。
选择“+ 新建步骤”,选择“内置”选项卡,然后找到并选择名为“条件”的控件。
在条件中,将“和”更改为“或”,因为我们要在单次分析中捕获连接事件或断开连接事件。
在“选择值”框中进行选择,此时会出现一个弹出窗口,其中显示了可选择的字段“动态内容”。
在“如果为 true”对话框中,单击“添加操作”。
搜索 Cosmos DB 并选择“Azure Cosmos DB — 创建或更新文档(V3)”
你会看到“创建或更新文档(V3)”面板。 在字段中输入以下值:
Azure Cosmos DB 帐户名称:{添加你的帐户名称}
数据库 ID:ToDoList
集合 ID:Items
文档:从动态内容参数列表中选择
Current item
保存逻辑应用。
复制 HTTP URL
在退出逻辑应用设计器之前,请复制逻辑应用要侦听的触发器 URL。 稍后要使用此 URL 来配置事件网格。
为 IoT 中心事件配置订阅
本部分将 IoT 中心配置为在发生事件时发布事件。
在 Azure 门户中导航到 IoT 中心。
选择“事件”。
选择“+ 事件订阅”。
填写“事件订阅详细信息”:提供一个描述性的“名称”,然后选择“事件网格架构”作为“事件架构”。
为 IoT 中心资源创建“系统主题名称”。
填写“事件类型”字段。 在下拉列表中,从菜单中仅选择“设备已连接”和“设备已断开连接”。 单击屏幕上的任何其他位置以关闭列表并保存选择。
对于“终结点详细信息”,请选择“Webhook”作为“终结点类型”,单击“选择终结点”并粘贴从逻辑应用中复制的 URL,然后确认选择。
窗体现在应类似于以下示例:
选择“创建”保存事件订阅。
运行设备并观察事件
设置事件订阅后,让我们通过连接设备进行测试。
在 IoT 中心注册设备
在 IoT 中心选择“设备”。
在窗格顶部选择“+ 添加设备”。
对于“设备 ID”,请输入
Demo-Device-1
。选择“保存”。
再次单击该设备;现在将会填入连接字符串和密钥。 复制并保存“主连接字符串”供稍后使用。
启动 Raspberry Pi 模拟器
让我们使用 Raspberry Pi Web 模拟器来模拟设备连接。
在 Raspberry Pi Web 模拟器上运行示例应用程序
此示例应用将触发设备已连接事件。
在代码区域中,将第 15 行中的占位符替换为在上一部分结束时保存的 Azure IoT 中心设备连接字符串。
选择“运行”以运行该应用程序。
此时会显示类似于以下输出的信息,其中显示了传感器数据以及发送到 IoT 中心的消息。
可以查看逻辑应用“概述”页来检查是否已触发你的逻辑。 该页将显示“成功”或“失败”。 如果需要进行故障排除,可以查看此页来了解逻辑应用状态。 触发器开始运行后,预期会出现 15-30 秒的延迟。 如果需要对逻辑应用进行故障排除,请查看这篇排查错误文章。
选择“停止”以停止模拟器,这会触发“设备已断开连接”事件。 与连接事件一样,此事件也会记录到逻辑应用“概述”页。
现已运行一个示例应用程序来收集设备的连接和断开连接事件,这些事件将发送到 IoT 中心。
在 Azure Cosmos DB 中观察事件
可以在 Cosmos DB 文档中查看执行的逻辑应用的结果。 刷新页面时,该文档会显示在“项”集合中。 每个连接状态事件会生成一个分配有唯一 id
的新文档。 下图显示了启动(连接)设备时创建的文档。 JSON 输出中列出了已连接事件类型。
使用 Azure CLI
如果不使用 Azure 门户,也可以使用 Azure CLI 来完成 IoT 中心相关的步骤。 有关详细信息,请参阅有关使用 Azure CLI 创建事件订阅和创建 IoT 设备的网页。
清理资源
本教程使用的资源会在 Azure 订阅中产生费用。 学习完本教程并测试结果后,请禁用或删除不再想要保留的资源。
逻辑应用
如果不希望丢弃针对逻辑应用所执行的操作,可以禁用逻辑应用,但不要将其删除。
导航到逻辑应用。
在“概述”边栏选项卡上,选择“删除”或“禁用”。
每个订阅可以包含一个免费 IoT 中心。 如果在本教程中创建了一个免费中心,则不需要将其删除,以免产生费用。
IoT 中心或事件网格
导航到 IoT 中心。
在“概览”边栏选项卡上,选择“删除”。
即使保留了 IoT 中心中,你也仍可能想要删除创建的事件订阅。 在 IoT 中心,选择“事件网格”。
选择要删除的事件订阅,然后选择“删除”。
Cosmos DB
若要从 Azure 门户中删除 Azure Cosmos DB 帐户,请转到你的资源,然后在顶部菜单栏中选择“删除帐户”。 参阅有关删除 Azure Cosmos DB 帐户的详细说明。
后续步骤
了解事件网格的其他作用
了解如何使用事件网格和 Azure Monitor 监视、诊断和排查设备与 IoT 中心的连接问题