使用 Azure 资源管理器创建和删除路由和终结点

本文介绍如何导出 Azure IoT 中心模板,将路由添加到 IoT 中心,然后使用 Azure CLI 或 Azure PowerShell 将该模板重新部署到 IoT 中心。 使用 Azure 资源管理器模板为 Azure 事件中心、Azure 服务总线队列和主题及 Azure 存储创建路由和终结点。

想要在 JSON 文件中定义资源时,Azure 资源管理器模板非常有用。 每个 Azure 资源都有用于定义该资源中使用的组件的模板。 可以导出所有 Azure 资源模板。

重要

使用资源管理器模板部署资源时,该模板将替换正在部署类型的任何现有资源。

创建新的 IoT 中心后,无需担心覆盖现有已部署资源的问题。 若要创建新的 IoT 中心,可以使用具有所需属性的基本模板,而无需从已部署的 IoT 中心导出的现有模板。

但是,如果将路由添加到现有 IoT 中心资源管理器模板,请使用从 IoT 中心导出的模板,用于确保部署已更新的模板后,所有现有资源和属性保持连接状态。 不会替换已部署的资源。 例如,如果已将 IoT 中心连接到存储,则导出之前已部署的资源管理器模板时可能包含 IoT 中心的存储信息。

若要详细了解 IoT 中心内的路由工作原理,请参阅使用 IoT 中心消息路由将设备到云的消息发送到不同的终结点。 若要了解如何设置将消息发送到存储的路由并在模拟设备上进行测试的步骤,请参阅教程:使用 IoT 中心消息路由将设备数据发送到 Azure 存储

先决条件

本文所述的过程使用以下资源:

  • Azure 资源管理器模板
  • IoT 中心
  • Azure 中的终结点服务

Azure Resource Manager 模板

本文使用 Azure 门户中的 Azure 资源管理器模板与 IoT 中心和其他 Azure 服务配合使用。 若要详细了解如何使用资源管理器模板,请参阅什么是 Azure 资源管理器模板?

IoT 中心

若要创建 IoT 中心路由,需要借助 Azure IoT 中心创建的 IoT 中心。 源自 IoT 中心的设备消息和事件日志。

创建 IoT 中心路由时,请确保具有以下中心资源:

终结点服务

若要创建 IoT 中心路由,需要将至少一个其他 Azure 服务作为路由的终结点。 该终结点接收设备消息和事件日志。 可以选择要与 IoT 中心路由连接的 Azure 服务的终结点:事件中心、服务总线队列或主题,或 Azure 存储。

创建 IoT 中心路由的终结点时,请确保具有以下资源之一:

创建路由

在 IoT 中心,可以创建路由来发送消息或捕获事件。 每个路由都有一个数据源和一个终结点。 数据源是消息或事件日志的来源。 终结点是消息或事件日志最终出现的位置。 在 IoT 中心创建新路由时,选择数据源和终结点的位置。 然后,可以在消息或事件到达终结点之前使用路由查询对其进行筛选。

可以使用事件中心、服务总线队列或主题或者 Azure 存储帐户作为 IoT 中心路由的终结点。 用于创建终结点的服务首先必须存在于 Azure 帐户中。

从 IoT 中心导出资源管理器模板

首先从 IoT 中心导出资源管理器模板,然后向其添加路由。

  1. 在 Azure 门户中,转到 IoT 中心。 在资源菜单中的“自动化”下,选择“导出模板”。

    Screenshot that shows the location of the Export template option in the menu of an IoT Hub resource.

  2. 在“导出模板”的“模板”选项卡上,完成以下步骤:

    1. 查看为 IoT 中心生成的 JSON 文件。

    2. 清除“包含参数”复选框。

    3. 选择“下载”以下载 JSON 文件的本地副本。

    Screenshot that shows the location of the Download button on the Export template pane.

    该模板具有多个占位符,可用于向 IoT 中心添加功能或服务。 对于本文,请仅向 routing 中或嵌套在其下的属性添加值。

将新终结点添加到资源管理器模板

在 JSON 文件中,找到嵌套在 "routing" 下的 "endpoints": [] 属性。 完成以下步骤以根据为终结点选择的 Azure 服务添加新终结点:事件中心、服务总线队列或主题或 Azure 存储。

若要了解如何创建事件中心资源(带容器),请参阅快速入门:使用资源管理器模板创建事件中心

Azure 门户中,从事件中心资源获取主连接字符串。 在资源的“共享访问策略”窗格中,选择其中一个策略以查看密钥和连接字符串信息。 将事件中心名称添加到实体路径中连接字符串的末尾。 例如,使用 ;EntityPath=my-event-hubs。 此名称是事件中心名称,而不是命名空间名称。

对于 name,为事件中心终结点使用唯一值。 将 id 参数保留为空字符串。 部署终结点时,Azure 服务会提供一个 id 值。

"routing": {
   "endpoints": {
      "serviceBusQueues": [],
      "serviceBusTopics": [],
      "eventHubs": [
            {
               "connectionString": "my Event Hubs connection string + entity path",
               "authenticationType": "keyBased",
               "name": "my-event-hubs-endpoint",
               "id": "",
               "subscriptionId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
               "resourceGroup": "my-resource-group"
            }
      ],
      "storageContainers": [],
      "cosmosDBSqlCollections": []
   },
},

将新路由添加到资源管理器模板

在 JSON 文件中,找到嵌套在 "routing" 下的 "routes": [] 属性,并根据所选终结点服务添加以下新路由:事件中心、服务总线队列或主题或 Azure 存储。

默认回退路由从 DeviceMessages收集消息。 选择其他选项,如 DeviceConnectionStateEvents。 有关源选项的详细信息,请参阅 az iot hub route

注意

如果将 "routes" 的任何现有值替换为以下代码示例中使用的路由值,则在部署时会删除现有路由。 若要保留现有路由,请将新路由对象添加到 "routes" 列表。

有关模板的详细信息,请参阅 Azure 资源管理器模板资源定义

"routes": [
    {
        "name": "MyIotHubRoute",
        "source": "DeviceConnectionStateEvents",
        "condition": "true",
        "endpointNames": [
        "my-event-hubs-endpoint"
        ],
        "isEnabled": true
    }
],

保存 JSON 文件。

部署资源管理器模板

将新的终结点和路由添加到资源管理器模板后,可以将 JSON 文件部署回 IoT 中心。

本地部署

az deployment group create \
  --name my-iot-hub-template \
  --resource-group my-resource-group \
  --template-file "my\path\to\template.json"

确认部署

若要确认模板已成功部署到 Azure,请转到 Azure 门户 中的资源组资源。 在“设置”下的资源菜单中,选择“部署”以查看部署列表中的模板。

Screenshot that shows a list of deployments for a resource in the Azure portal, with a test template highlighted.

若要查看 Azure 门户中的新路由,请转到 IoT 中心资源。 在“消息路由”窗格的“路由”选项卡上,确认路由已列出。

后续步骤

在本操作指南文章中,你已了解如何为事件中心、服务总线队列和主题及 Azure 存储创建路由和终结点。

若要详细了解消息路由,请参阅教程:使用 IoT 中心消息路由将设备数据发送到 Azure 存储。 在该教程中,你将创建一个存储路由并使用 IoT 中心内的设备对其进行测试。