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

已完成

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

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

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

先决条件

若要执行此练习,需要:

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

创建 Azure IoT Central 应用程序

  1. 启动 Web 浏览器并导航到“欢迎使用 IoT Central”页面。

  2. 在“欢迎使用 IoT Central”页面上,选择右上角的头像图标。

  3. 出现提示时,请登录以访问将在此模块中使用的 Azure 订阅。

  4. 在“欢迎使用 IoT Central”页面上,展开垂直菜单,然后选择“我的应用”菜单项。

  5. 在“我的应用”页面上,选择“+ 新建应用程序”。

  6. 在“生成 IoT 应用程序”页面上,确保选择了“零售”选项卡,查看可用应用程序,然后在“存储内分析 - 条件监视”磁贴中选择“创建应用”。

    IoT Central 应用程序门户中“生成 IoT 应用程序”页面上的内置模板屏幕截图。

  7. 在“新建应用程序”页面上,配置以下设置,然后选择“创建”。

    设置 配置
    应用程序名称 输入“adatum-iot-sample-application”。
    应用程序 URL 输入由小写字母、数字或破折号组成且以字母开头的唯一名称。
    定价计划 选择标准定价计划之一。 选择“目录”、“Azure 订阅”和“位置”。 若要了解如何创建 IoT Central 应用程序,请参阅创建 IoT Central 应用程序。 若要了解定价,请参阅 Azure IoT Central 定价

    IoT Central 应用程序门户中的“新建应用程序”页面的屏幕截图。

    注意

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

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

  9. 在“设备”页面上的“恒温调节器”部分中,选择“Thermostat-Zone1”。

  10. 在“设备”页面上的“Thermostat-Zone1”窗格中,查看“仪表板”选项卡的内容。

    IoT Central 应用程序门户中 Thermostat-Zone1 设备窗格的“仪表板”选项卡屏幕截图。

  11. 在“设备”页面上的“Thermostat-Zone1”窗格中,选择“原始数据”选项卡标题,并查看“原始数据”选项卡的内容。

    IoT Central 应用程序门户中 Thermostat-Zone1 设备窗格的“原始数据”选项卡屏幕截图。

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

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

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

  2. 使用 Azure 门户页面开头的“搜索资源、服务和文档”文本框搜索“Function 应用”。

  3. 在“Function 应用”窗格上,选择“+ 创建”。

  4. 在“创建函数应用”边栏选项卡的“基本信息”选项卡上,配置以下设置,然后选择“下一步: 托管 >”

    设置 配置
    订阅 选择要在本模块中使用的 Azure 订阅的名称。
    资源组 创建名为“function-app-RG”的新资源组。
    Function App 名称 输入由小写字母、数字或破折号组成且以字母开头的唯一名称。
    发布 选择“代码”。
    运行时堆栈 选择“.NET”。
    版本 选择“3.1”。
    区域 选择离实验室环境所在位置最近的 Azure 区域,最好与为 Azure IoT Central 部署选择的位置相一致。

    Azure 门户中“创建 Function 应用”窗格的“基本信息”选项卡屏幕截图。

  5. 在“创建函数应用”边栏选项卡的“托管”选项卡上,接受默认设置,然后选择“下一步: 监视 >”。

  6. 在“创建 Function 应用”窗格的“监视”选项卡上,接受默认设置,然后选择“查看 + 创建”。

  7. 在“创建 Function 应用”窗格的“查看 + 创建”选项卡上,选择“创建”。

    注意

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

  8. 在显示 Azure 门户及 Azure 函数应用预配状态窗格的浏览器窗口中,选择“转到资源”。

  9. 在 Azure 函数应用窗格上,选择“Functions”,然后选择“+ 添加”。

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

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

    Azure 门户中 Azure 函数应用的“添加函数”窗格屏幕截图。

  11. 在“HttpTrigger1”窗格上左侧的垂直菜单栏中,在“开发人员”部分中选择“集成”。

    Azure 门户中 Azure 函数应用的“集成函数”窗格屏幕截图。

  12. 在“HttpTrigger1 | 集成”边栏选项卡上标记为“输出”的矩形中,选择“+ 添加输出”。

  13. 在“创建输出”窗格上,配置以下设置,然后选择“确定”:

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

    Azure 门户中 Azure 函数的“HttpTrigger1 集成”窗格的“创建输出”窗格屏幕截图。

    注意

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

  14. 在“HttpTrigger1 | 集成”边栏选项卡上垂直菜单栏中的“开发人员”部分,选择“代码 + 测试”。

  15. 在“HttpTrigger1 | 代码 + 测试”边栏选项卡上,将现有代码替换为以下内容,然后选择“保存”以保存所做更改:

    #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
      };
    }
    

    Azure 门户中 Azure 函数应用的“HttpTrigger1”窗格的“代码 + 测试”窗格屏幕截图,其中显示了代码。

    注意

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

  16. 在“HttpTrigger1 | 代码 + 测试”边栏选项卡上,选择“获取函数 URL”以获取函数密钥并记录其值。

    Azure 门户中 Azure 函数应用的“HttpTrigger1”窗格的“代码 + 测试”窗格屏幕截图,其中显示“获取函数 URL”弹出窗口。

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

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

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

  3. 在“规则”页面上,选择“+ 新建”并配置以下设置:

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

    示例 Azure IoT Central 应用程序规则的第一部分屏幕截图。

    示例 Azure IoT Central 应用程序规则的第二部分屏幕截图。

    注意

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

  4. 在“规则”页面上,选择“完成”,然后选择“保存”。

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

  6. 在垂直菜单的“开发人员”部分中,选择“监视”条目。 在“HttpTrigger1 | 代码 + 测试”窗格上,选择“日志”选项卡。

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

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

  9. 在 Cosmos DB 帐户的“数据资源管理器”窗格上的“SQL API”部分中,选择“刷新”按钮(采用圆形箭头的形式),展开“iotdb”节点及其“iotcollection”,选择“项”节点,然后选择项列表中的第一个文档。

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

    Azure Cosmos DB 项的屏幕截图,这些项表示由注册到 Azure Central IoT 的设备生成并由 Azure 函数处理的遥测数据。

结果

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