教程:使用事件网格和逻辑应用发送有关 Azure IoT 中心事件的电子邮件通知

使用 Azure 事件网格可以通过在下游业务应用程序中触发操作,对 IoT 中心内的事件做出反应。

本文逐步讲解一个使用 IoT 中心和事件网格的示例配置。 在本文末尾,我们将设置一个 Azure 逻辑应用,使其在每次将设备连接到 IoT 中心或与其断开连接时,都会发送一封通知电子邮件。 事件网格可用于及时通知关键设备断开连接。 指标和诊断可能需要几分钟(例如 20 分钟或更长时间)才能显示在日志/警报中。 对于关键基础结构而言,较长的处理时间可能是不可接受的。

如果没有 Azure 订阅,可在开始前创建一个试用帐户。

先决条件

  • 来自 Azure 逻辑应用支持的任何电子邮件提供程序(例如 Office 365 Outlook 或 Outlook.com)的电子邮件帐户。 此电子邮件帐户用于发送事件通知。
  • 如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。

    • 如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录。

    • 出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展的详细信息,请参阅 将扩展与 Azure CLI 配合使用。

    • 运行az version命令,以查看已安装的版本和依赖库。 若要升级到最新版本,请运行az upgrade。

创建 IoT 中心

可以使用 Azure CLI 快速创建新的 IoT 中心。

  1. 运行以下命令来创建新资源组:

    az group create --name {your resource group name} --location chinanorth2
    
  2. 运行以下命令创建 IoT 中心:

    az iot hub create --name {your iot hub name} --resource-group {your resource group name} --sku S1 
    

创建逻辑应用

接下来,创建一个逻辑应用并添加一个 HTTP 事件网格触发器来处理来自 IoT 中心的请求。

创建逻辑应用资源

  1. 在 Azure 门户中,选择“ 创建资源”,然后在搜索框中键入“逻辑应用”,然后按 Enter。 从结果中选择“逻辑应用”。

    如何从资源列表中选择逻辑应用的屏幕截图。

  2. 在下一个屏幕上选择“创建”。

  3. 在“ 创建逻辑应用 ”页上,选择“ 消耗”(多租户),然后选择“ 选择”。

  4. 在 “创建逻辑应用”(多租户) 页上,为逻辑应用提供订阅中的唯一名称,然后选择与 IoT 中心相同的订阅、资源组和位置。

    如何配置逻辑应用的屏幕截图。

  5. 选择“查看 + 创建”。

  6. 验证设置,然后选择“创建”。

  7. 创建资源后,选择“转到资源”。

  8. 在资源菜单中,选择开发工具下的逻辑应用模板。

  9. 在工作窗格中,选择 “空白”工作流 ,以便可以从空工作流开始。

    逻辑应用模板的屏幕截图。

选择触发器

触发器是启动逻辑应用的特定事件。 在本教程中,触发工作流的触发器通过 HTTP 接收请求。

  1. 在工作流设计器中,选择“添加触发器”。

  2. 在连接器和触发器搜索栏中,键入 HTTP。

  3. 滚动浏览结果并选择“请求 - 当收到 HTTP 请求时”作为触发器。

    工作流设计器中“添加触发器”窗格的屏幕截图。

  4. 在触发器配置框中,选择 “使用示例有效负载生成架构”。

    触发器信息框的屏幕截图。

  5. 复制以下内容 json ,并将占位符值 <> 替换为你自己的值。

  6. 将 设备连接事件架构 JSON 粘贴到 输入或粘贴示例 JSON 负载 的文本框中,然后选择“完成”。

      [{  
       "id": "f6bbf8f4-d365-520d-a878-17bf7238abd8",
       "topic": "/SUBSCRIPTIONS/<azure subscription ID>/RESOURCEGROUPS/<resource group name>/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/<hub name>",
       "subject": "devices/LogicAppTestDevice",
       "eventType": "Microsoft.Devices.DeviceConnected",
       "eventTime": "2018-06-02T19:17:44.4383997Z",
       "data": {
           "deviceConnectionStateEventInfo": {
             "sequenceNumber":
               "000000000000000001D4132452F67CE200000002000000000000000000000001"
           },
         "hubName": "<hub name>",
         "deviceId": "LogicAppTestDevice",
         "moduleId" : "DeviceModuleID"
       }, 
       "dataVersion": "1",
       "metadataVersion": "1"
     }]
    

    重要

    请务必将 JSON 片段粘贴到“使用示例有效负载生成架构”链接提供的框中,而不是直接粘贴到“请求正文 JSON 架构”框中。 示例有效负载链接提供了一种基于 JSON 片段生成 JSON 内容的方法。 最终出现在请求正文中的 JSON 与 JSON 片段不同。

    当设备连接到 IoT 中心时发布此事件。

  7. 在设计器工具栏上选择“保存”。

    注释

    你可能会收到一条弹出通知,指出,请记住在 请求中包含一个设置为 application/json 的 Content-Type 标头。 可以放心地忽略此建议,并转到下一部分。

  8. 关闭触发器信息框。

创建操作

操作是在触发器启动逻辑应用工作流之后发生的任何步骤。 在本教程中,操作是从电子邮件提供程序发送电子邮件通知。

  1. 在设计器上,选择触发器下的加号(+),然后选择 “添加操作”。

  2. 在 “添加操作” 框中,搜索 Outlook。

  3. 根据你的电子邮件提供程序,找到并选择匹配的连接器。 本教程使用 Outlook.com 作为其电子邮件提供商。 若要使用相应的连接器,请在 Outlook.com 下选择 发送电子邮件(V2) 操作。 使用其他电子邮件提供程序时执行的步骤类似。 或者,可以使用 Office 365 Outlook 跳过登录步骤。

    “添加动作”框的屏幕截图。

  4. 选择“登录”并登录到你的电子邮件帐户。 选择“是”,允许应用访问你的信息。

  5. 生成电子邮件模板。

    • 收件人:输入接收通知电子邮件的电子邮件地址。 对于本教程,请使用你可以访问的电子邮件帐户进行测试。

    • 主题:填写主题文本。 选择 “主题 ”文本框时,可以选择文本框旁边显示的函数图标或键入斜杠(/)字符,然后选择 “插入动态内容 列表”选项以包括动态内容。 例如,本教程使用 IoT Hub alert: {eventType}。

    选择 eventType 后,将看到到目前为止的电子邮件表单输出。 选择“发送和电子邮件(V2)”以编辑电子邮件正文。

    压缩正文输出表单的屏幕截图。

    • 正文:为电子邮件写入文本。 在选择器工具中选择 JSON 属性,以包含基于事件数据的动态内容。 如果看不到选择器工具,请选择 “正文 ”文本框,然后选择文本框旁显示的函数图标,以包含表达式和动态内容。 如果未显示所需字段,请在“动态内容”屏幕中选择“查看更多”,以包含上一个操作中的字段。

    电子邮件模板可能如以下示例所示:

    如何在模板中创建事件电子邮件的屏幕截图。

  6. 在工作流设计器中选择“ 保存 ”。

复制 HTTP URL

在离开工作流设计器之前,请复制逻辑应用正在侦听触发器的 URL。 稍后要使用此 URL 来配置事件网格。

  1. 通过选择“收到 HTTP 请求时”触发器配置框来展开该配置框。

  2. 通过选择 HTTP URL 旁边的复制按钮复制 HTTP URL 的值。

    如何复制触发器的 HTTP URL 的屏幕截图。

  3. 保存此 URL,以便在下一部分可以引用它。

为 IoT 中心事件配置订阅

在本部分中,将 IoT 中心配置为在事件发生时发布事件。

  1. 在 Azure 门户中导航到 IoT 中心。 可以通过从 Azure 仪表板中选择“IoT 中心”来找到 IoT 中心,然后从资源列表中选择 IoT 中心实例。

  2. 选择事件。

    Azure 门户中 IoT 中心服务菜单的屏幕截图,其中突出显示了“事件”命令。

  3. 选择“事件订阅”。

    Azure 门户中 IoT 中心的工作窗格的屏幕截图,其中突出显示了命令栏中的事件订阅命令。

  4. 使用以下值创建事件订阅:

    1. 在“事件订阅详细信息”部分:

      1. 为事件订阅提供一个名称。
      2. 对于“事件架构”,请选择“事件网格架构”。
    2. 在“主题详细信息”部分:

      1. 确认“主题类型”是否设置为“IoT 中心”。
      2. 确认 IoT 中心的名称是否设置为“源资源”字段的值。
      3. 输入要为你创建的系统主题的名称。 若要了解系统主题,请参阅 Azure 事件网格中的系统主题。
    3. 在“事件类型”部分:

      1. 选择“筛选到事件类型”下拉列表。

      2. 取消选择“设备已创建”和“设备已删除”复选框,仅保留选中“连接已设备”和“设备已断开连接”复选框。

        Azure 门户中“创建事件订阅”页的屏幕截图,其中显示了“事件类型”部分。

    4. 在“终结点详细信息”部分:

      1. 选择“终结点类型”作为“Web Hook”。
      2. 选择一个终结点,粘贴从逻辑应用复制的 URL,并确认选择。

      Azure 门户中“创建事件订阅”页的屏幕截图,其中显示了“终结点详细信息”部分。

      完成后,窗格应如以下示例所示:

      Azure 门户中“创建事件订阅”页面的屏幕截图。

  5. 选择 创建。

模拟新设备连接并发送遥测数据

使用 Azure CLI 快速模拟设备连接来测试逻辑应用。

  1. 运行以下命令创建模拟设备标识:

    az iot hub device-identity create --device-id simDevice --hub-name {YourIoTHubName}
    

    处理可能需要一分钟时间。 处理完成后,控制台中会显示 JSON 打印输出。

  2. 运行以下命令以模拟将设备连接到 IoT 中心并发送遥测数据:

    az iot device simulate -d simDevice -n {YourIoTHubName}
    
  3. 模拟设备连接到 IoT 中心时,会收到一封电子邮件,通知你“DeviceConnected”事件。

  4. 模拟完成后,你会收到一封电子邮件,通知你“DeviceDisconnected”事件。

    应该收到的电子邮件的屏幕截图。

清理资源

本教程使用的资源会在 Azure 订阅中产生费用。 学习完本教程并测试结果后,请禁用或删除不再想要保留的资源。

若要删除在本教程中创建的所有资源,请删除资源组。

  1. 选择“资源组”,然后选择本教程中创建的资源组。

  2. 在“资源组”页上,选择“删除资源组”。 系统会提示你输入资源组名称,然后你可以将其删除。 同时会删除其中包含的所有资源。

后续步骤

有关支持的逻辑应用连接器的完整列表,请参阅: