练习 - 将 Azure Cosmos DB 与 IoT 数据管道集成

已完成

此练习概述了如何使用 Azure IoT Central 应用程序设置生成的 IoT 遥测的收集、处理和存储。

通过学习本练习,你将能够:

  • 创建 Azure IoT Central 应用程序
  • 创建用于记录 HTTP 请求有效负载的 Azure 函数
  • 配置和验证 Azure IoT Central 应用程序的 IoT 遥测规则

先决条件

若要执行此练习,需要:

  • Microsoft 帐户或 Microsoft Entra 帐户,该帐户在 Azure 订阅关联的 Microsoft Entra 租户中具有全局管理员角色并在 Azure 订阅中具有所有者或参与者角色。
  • 完成了练习单元“设置 Azure Cosmos DB”。
  • 一个有效的 Azure 订阅。 如果没有 Azure 订阅,请在开始之前创建一个免费帐户

创建 Azure IoT Central 应用程序

  1. 导航到 Azure 门户中的创建 IoT Central 应用程序页。 如果出现系统提示,请使用 Azure 帐户登录。

  2. 输入以下信息:

    字段 说明
    订阅 你想要使用的 Azure 订阅。
    资源组 你想要使用的资源组。 可创建新的资源组或使用现有资源组。
    资源名称 有效的 Azure 资源名称,例如 adatum-iot-custom-application。
    应用程序 URL 应用程序的 URL 子域,例如 adatum-iot-custom-application。 IoT Central 应用程序的 URL 类似于 https://adatum-iot-custom-application.azureiotcentral.com
    模板 店内应用程序 - 条件监视
    区域 要使用的 Azure 区域。
    定价计划 选择标准定价计划之一。 若要了解定价,请参阅 Azure IoT Central 定价
  3. 选择“查看 + 创建”。 然后选择“创建”。

当应用准备就绪后,可以从 Azure 门户导航到它:

Screenshot that shows the IoT Central application resource in the Azure portal. The application URL is highlighted.

提示

若要列出有权访问的所有 IoT Central 应用程序,请导航到 IoT Central 应用程序

这将显示“仪表板”页面。 这可能需要几分钟的时间。 查看示例 Azure IoT Central 应用程序的遥测和分析:

  1. 在 IoT Central 应用程序门户的“仪表板”页面的垂直菜单中,选择“设备”。

  2. 在“恒温调节器”部分中,选择“Thermostat-Zone1”。

  3. 在“Thermostat-Zone1”窗格中,查看“仪表板”选项卡的内容。

    Screenshot of the Dashboard tab of the Thermostat-Zone1 device pane in the IoT Central Application portal.

  4. 选择“原始数据”选项卡,然后查看内容。

    Screenshot of the Raw data tab of the Thermostat-Zone1 device pane in the IoT Central Application portal.

创建用于记录 HTTP 请求有效负载的 Azure 函数

在此任务中,你将创建一个实现 HTTP Webhook 功能的 Azure 函数应用。 通过创建应用程序规则,应用此功能以便从 Azure IoT Central 应用程序转发遥测数据。

  1. 启动 Web 浏览器,导航到 Azure 门户并登录要在本模块中使用的 Azure 订阅。

  2. 使用“搜索资源、服务和文档”文本框来搜索函数应用。

  3. 在“函数应用”窗格中,选择“+创建”。

  4. 在“基本”选项卡上,配置以下设置,然后选择“查看 + 创建”。

    设置 配置
    订阅 选择要用于本模块的 Azure 订阅的名称。
    资源组 创建名为“function-app-RG”的新资源组。
    Function App 名称 输入由小写字母、数字或破折号组成且以字母开头的唯一名称。
    发布 选择“代码”。
    运行时堆栈 选择“.NET”。
    版本 选择“6”。
    区域 选择离实验室环境所在位置最近的 Azure 区域,最好与为 Azure IoT Central 部署选择的位置相一致。
    操作系统 Windows
    计划类型 消耗(无服务器)

    Screenshot of the Basics tab of the Create Function App pane in the Azure portal.

  5. 选择“创建”。

    注意

    等待 Azure 函数应用预配完成。 这可能需要大约 2 分钟。

  6. Azure 函数应用部署完成后,选择“转到资源”。

  7. 在“Azure 函数应用”窗格上,选择“Functions”,然后选择“+ 创建”。

  8. 在“添加函数”窗格上,指定如下设置,然后选择“创建”。

    设置 配置
    开发环境 在门户中开发
    模板 HTTP 触发器
    新建函数 HttpTrigger1
    授权级别 函数

    Screenshot of the Add function pane of the Azure Function app in the Azure portal.

  9. 在“HttpTrigger1”窗格中,从菜单中选择“集成”。

    Screenshot of the Integration function pane of the Azure Function app in the Azure portal.

  10. 在标记为“输出”的矩形中,选择“+ 添加输出”。

  11. 配置以下设置,然后选择“确定”:

    设置 配置
    绑定类型 选择“Azure Cosmos DB”。
    文档参数名称 替换默认值 outDoc。
    数据库名称 输入在上一个练习中创建的数据库的名称 iotdb。
    集合名称 输入 iotcollection。
    如果为 true,则创建 Cosmos DB 数据库 请选择“是”。
    Cosmos DB 帐户连接 选择“新建”。 在“新 Cosmos DB 连接”弹出窗口中,确保选中“Azure Cosmos DB 帐户”选项。 在“Cosmos DB 帐户连接”下拉列表中,选择表示在上一个练习中创建的 Cosmos DB 帐户的条目,然后选择“确定”两次。
    分区键(可选) 输入 /pk/timestamp/deviceid。

    Screenshot of the Create Output pane of the HttpTrigger1 Integration pane of an Azure function in the Azure portal.

    注意

    选择最佳分区键时,必须考虑使用模式和 20 GB 逻辑分区大小限制。 例如,可以创建由 deviceId 和 date 的组合组成的合成分区键。

  12. 选择“代码 + 测试”。

  13. 将现有代码替换为以下内容,然后选择“保存”。

    #r "Newtonsoft.Json"
    
    using Microsoft.Azure.WebJobs.Host;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    using Microsoft.Extensions.Logging;
    using Microsoft.AspNetCore.Mvc;
    
    public static void Run(HttpRequest req, out object outDoc, ILogger log)
    {
      log.LogInformation($"C# Queue trigger function processed: {req.Body}");
    
      string requestBody = new StreamReader(req.Body).ReadToEnd();
      dynamic iotDataJson = JObject.Parse(requestBody);
      dynamic iotData = JsonConvert.DeserializeObject<dynamic>(iotDataJson.ToString());
    
      log.LogInformation($"{iotData}");
    
      outDoc = new {
        pk = iotData.device.id + "-" + iotData.timestamp.ToString("yyyyMMdd"),
        timestamp = iotData.timestamp,
        deviceId = iotData.device.id,
        temperature = iotData.device.telemetry.Thermostat_1o.temp.value
      };
    }
    

    Screenshot of the Code + Test pane of the HttpTrigger1 of the Azure Function app in the Azure portal displaying the code.

    注意

    该函数记录 HTTP 请求的基于 JSON 的有效负载,并构造要存储在目标 Cosmos DB 集合的各个文档(与配置的函数输出对应)中的各个 JSON 元素。 可以使用 pk 元素作为分区键,该元素由串联的 deviceId 属性和所收集遥测数据点的日期组成。

  14. 选择“获取函数 URL”以获取函数密钥并记录其值。

    Screenshot of the Code + Test pane of the HttpTrigger1 of the Azure Function app in the Azure portal, with the Get function URL pop-up window.

配置和验证 Azure IoT Central 应用程序的 IoT 遥测规则

  1. 切换回 Web 浏览器窗口,其中显示以前在此练习中创建的 Azure IoT Central 应用程序的“设备”页面。

  2. 在 IoT Central 应用程序门户的垂直菜单中,选择“规则”。

  3. 选择“+ 新建”并配置以下设置:

    设置 配置
    规则名称 输入“Adatum IoT 遥测规则”。
    设备模板 选择“恒温调节器”。
    时间聚合 确保设置已“关闭”。
    遥测 选择“温度”。
    操作员 选择“大于”。
    输入一个值 输入“0”。
    操作 选择“+ Webhook”。
    显示名称 输入“Azure function webhook”。
    回调 URL 粘贴在本练习的上一个任务中记录的 Azure 函数 URL 值。

    Screenshot of the first part of the sample Azure IoT Central application rule.

    Screenshot of the second part of the sample Azure IoT Central application rule.

    注意

    温度遥测值是有意手动设置为低值的,用于调用 Webhook 功能和触发函数。 在真实方案中,需要对它进行调整,以便对应于证明要存储在目标 Cosmos DB 集合中的数据集合的条件。

  4. 依次选择“完成”和“保存”。

  5. 切换回在 Azure 门户中显示“HttpTrigger1 | 代码+ 测试”窗格的 Web 浏览器窗口。

  6. 选择“监视”,然后选择“日志”选项卡。

  7. 验证“日志”窗格是否显示为响应 HTTP 触发器而生成的消息,该触发器来自之前在此任务中配置的 Azure IoT Central 应用程序 Webhook。

  8. 切换到 Web 浏览器窗口,其中显示在上一个练习中预配的 Cosmos DB 帐户的“数据资源管理器”窗格。

  9. 在“NOSQL API”部分中,选择圆形箭头“刷新”按钮,展开“iotdb”节点及其“iotcollection”,选择“项”节点,然后选择项列表中的第一个文档。

  10. 验证“数据资源管理器”窗口中“项”选项卡的“详细信息”窗格是否显示由注册到 Azure Central IoT 应用程序的设备生成并由 Azure 函数处理的遥测数据,包括 pk、timestamp、deviceId 和 temperature。

    Screenshot of the Azure Cosmos DB items representing telemetry data generated by devices registered with Azure IoT Central and processed by the Azure function.

结果

祝贺你! 你完成了本模块的第二个练习。 在此练习中,你创建了一个 Azure IoT Central 应用程序。