教程:使用事件网格和逻辑应用发送有关 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 chinanorth
    
  2. 运行以下命令创建 IoT 中心:

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

创建逻辑应用

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

创建逻辑应用资源

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

    Screenshot of how to select the logic app from a list of resources.

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

  3. 在订阅中为逻辑应用指定一个唯一名称,然后选择与 IoT 中心相同的订阅、资源组和位置。 选择“消耗”计划类型。

    Screenshot of how to configure your logic app.

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

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

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

  7. 在“逻辑应用设计器”中,下滑页面查看“模板”。 选择“空白逻辑应用”,以便可以从头开始构建逻辑应用。

    Screenshot of the Logic App Designer templates.

选择触发器

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

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

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

    Select HTTP request trigger

  3. 选择使用示例有效负载生成架构

    Use sample payload

  4. 复制下面的 json 并将占位符值 <> 替换为自己的值。

  5. 将“设备已连接事件架构”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 中心时发布此事件。

注意

可能会收到一条弹出通知,其中指出,“请记住要在请求中包含设为 application/json 的内容类型标头”。可以放心忽略此建议,并转到下一部分。

创建操作

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

  1. 选择“新建步骤”。 将出现一个窗口,提示你选择一个操作。

  2. 搜索“Outlook”。

  3. 根据你的电子邮件提供程序,找到并选择匹配的连接器。 本教程使用 Outlook.com。 使用其他电子邮件提供程序时执行的步骤类似。 或者,使用 Office 365 Outlook 跳过登录步骤。

    Select email provider connector

  4. 选择“发送电子邮件 (V2)”操作。

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

  6. 生成电子邮件模板。

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

    • 使用者:填写主题文本。 单击“主题”文本框时,可以选择要包含的动态内容。 例如,本教程使用 IoT Hub alert: {eventType}。 如果看不到动态内容,请选择“添加动态内容”超链接以打开或关闭“动态内容”视图。

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

    Screenshot of the condensed body output form.

    • 正文:编写电子邮件的文本。 在选择器工具中选择 JSON 属性,以包含基于事件数据的动态内容。 如果未看到“动态内容”,请选择“正文”文本框下的“添加动态内容”超链接 。 如果未看到所需字段,单击“动态内容”屏幕中的“更多”,以包含上一个操作中的字段。

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

    Screenshot of how to create an event email in the template.

  7. 在逻辑应用设计器中选择“保存”。

复制 HTTP URL

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

  1. 单击“当收到 HTTP 请求时”触发器配置框将其展开。

  2. 选择“HTTP POST URL”旁边的复制按钮复制其值。

    Copy the HTTP POST URL

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

为 IoT 中心事件配置订阅

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

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

  2. 选择“事件”。

    Open the Event Grid details

  3. 选择“事件订阅”。

    Create new event subscription

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

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

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

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

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

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

        select subscription event types

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

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

      select endpoint url

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

      Screenshot of your 'Create Event Subscription' page in the Azure portal.

  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”事件。

    Screenshot of the email you should receive.

清理资源

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

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

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

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

后续步骤

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