快速入门:使用 ARM 模板设置 IoT 中心设备预配服务 (DPS)

可以使用 Azure 资源管理器模板(ARM 模板)以编程方式设置预配设备所需的 Azure 云资源。 这些步骤显示如何使用 ARM 模板创建 IoT 中心和新的 IoT 中心设备预配服务。 也使用模板将 IoT 中心链接到 DPS 资源。 此链接支持 DPS 资源根据配置的分配策略将设备分配到中心。

资源管理器模板是定义项目基础结构和配置的 JavaScript 对象表示法 (JSON) 文件。 模板使用声明性语法。 在声明性语法中,你可以在不编写创建部署的编程命令序列的情况下,描述预期部署。

本快速入门使用 Azure 门户Azure CLI 来执行创建资源组和部署模块必要的编程步骤。 但是,也可以使用 PowerShell、.NET、Ruby 或其他编程语言来执行这些步骤并部署模板。

如果你的环境满足先决条件,并且你已经熟悉 ARM 模板的使用,选择“部署到 Azure”按钮后,会在 Azure 门户中打开用于部署的模板。

概述中的“部署到 Azure”

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

先决条件

  • 如需在本地运行 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

查看模板

本快速入门中使用的模板来自 Azure 快速启动模板

注意

目前没有 ARM 模板支持使用新的 DPS 资源创建注册。 关于此功能的请求很常见,我们已知晓,且正在考虑实现它。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "iotHubName": {
      "type": "string",
      "metadata": {
        "description": "Specify the name of the Iot hub."
      }
    },
    "provisioningServiceName": {
      "type": "string",
      "metadata": {
        "description": "Specify the name of the provisioning service."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Specify the location of the resources."
      }
    },
    "skuName": {
      "type": "string",
      "defaultValue": "S1",
      "metadata": {
        "description": "The SKU to use for the IoT Hub."
      }
    },
    "skuUnits": {
      "type": "string",
      "defaultValue": "1",
      "metadata": {
        "description": "The number of IoT Hub units."
      }
    }
  },
  "variables": {
    "iotHubKeyName": "iothubowner"    
  },
  "resources": [
    {
      "type": "Microsoft.Devices/IotHubs",
      "apiVersion": "2021-03-31",
      "name": "[parameters('iotHubName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('skuName')]",
        "capacity": "[parameters('skuUnits')]"
      },
      "properties": {}
    },
    {
      "type": "Microsoft.Devices/provisioningServices",
      "apiVersion": "2020-03-01",
      "name": "[parameters('provisioningServiceName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('skuName')]",
        "capacity": "[parameters('skuUnits')]"
      },
      "dependsOn": [ "[parameters('iotHubName')]" ],
      "properties": {
        "iotHubs": [
          {
            "connectionString": "[concat('HostName=', reference(resourceId('Microsoft.Devices/Iothubs', parameters('iotHubName'))).hostName, ';SharedAccessKeyName=', variables('iotHubKeyName'), ';SharedAccessKey=', listkeys(resourceId('Microsoft.Devices/Iothubs/Iothubkeys', parameters('iotHubName'), variables('iotHubKeyName')), '2020-03-01').primaryKey)]",
            "location": "[parameters('location')]",
            "name": "[reference(resourceId('Microsoft.Devices/Iothubs', parameters('iotHubName'))).hostName]"
          }
        ]
      }
    }
  ]
}

之前的模板中定义了两个 Azure 资源:

部署模板

使用门户进行部署

  1. 选择下图登录到 Azure 并打开模板以进行部署。 该模板会创建新的 IoT 中心和 DPS 资源。 新的 IoT 中心已链接到 DPS 资源。

    “在门户中部署到 Azure”步骤

  2. 选择或输入以下值,然后选择“查看 + 创建”。

    门户上的 ARM 模板部署参数

    除非下面的字段已指定,否则请使用默认值创建 IoT 中心和 DPS 资源。

    字段 说明
    订阅 选择 Azure 订阅。
    资源组 选择“新建”,输入资源组的唯一名称,然后选择“确定”。
    区域 选择资源的区域。 例如“中国东部”。 为了复能力和可靠性,我们建议部署到支持可用性区域的区域之一。
    IoT 中心名称 输入 IoT 中心的名称,该名称在 .azure-devices.cn 命名空间内必须是全局唯一的。 在下一部分验证部署时,需要中心名称。
    预配服务名称 输入新设备预配服务 (DPS) 资源的名称。 该名称在 .azure-devices-provisioning.net 命名空间内必须是全局唯一的。 在下一部分验证部署时,需要 DPS 名称。
  3. 在下一个屏幕上,阅读条款。 如果同意所有条款,请选择“创建”。

    此部署需要一些时间才能完成。

    除了 Azure 门户,还可以使用 Azure PowerShell、Azure CLI 和 REST API。 若要了解其他部署方法,请参阅部署模板

使用 Azure CLI 进行部署

使用 Azure CLI 需要版本 2.6 或更高版本。 如果在本地运行 Azure CLI,请通过运行 az --version 来验证版本

登录到 Azure 帐户,并选择订阅。

  1. 如果在本地运行 Azure CLI 而不是在门户中运行 Azure CLI,则需要登录。 若要在提示符中登录,请运行登录命令

    az cloud set -n AzureChinaCloud
    az login
    # az cloud set -n AzureCloud   //means return to Public Azure.
    

    按照说明使用代码进行身份验证,并通过 Web 浏览器登录 Azure 帐户。

  2. 如果有多个 Azure 订阅,登录 Azure 可获得与凭据关联的所有 Azure 帐户的访问权限。 使用以下命令列出可供使用的 Azure 帐户

    az account list -o table
    

    使用以下命令,选择想要用于运行命令以创建 IoT 中心和 DPS 资源的订阅。 可使用上一命令输出中的订阅名称或 ID:

    az account set --subscription {your subscription name or id}
    
  3. 将以下命令复制并粘贴到 CLI 提示符。 通过选择 Enter 键执行命令。

    提示

    命令会提示输入资源组位置。 可以先运行以下命令,查看可用位置的列表:

    az account list-locations -o table

    read -p "Enter a project name that is used for generating resource names:" projectName &&
    read -p "Enter the location (i.e. chinaeast):" location &&
    templateUri="https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.devices/iothub-device-provisioning/azuredeploy.json" &&
    resourceGroupName="${projectName}rg" &&
    az group create --name $resourceGroupName --location "$location" &&
    az deployment group create --resource-group $resourceGroupName --template-uri  $templateUri &&
    echo "Press [ENTER] to continue ..." &&
    read
    
  4. 命令会提示输入以下信息。 提供每个值并选择 Enter 键。

    参数 说明
    项目名称 此参数的值用于创建资源组以保存所有资源。 字符串 rg 会添加到资源组名称的值末尾。
    location 此值是所有资源创建的区域。
    iotHubName 输入 IoT 中心的名称,该名称在 .azure-devices.cn 命名空间内必须是全局唯一的。 在下一部分验证部署时,需要中心名称。
    provisioningServiceName 输入新设备预配服务 (DPS) 资源的名称。 该名称在 .azure-devices-provisioning.net 命名空间内必须是全局唯一的。 在下一部分验证部署时,需要 DPS 名称。

    Azure CLI 用于部署模板。 除了 Azure CLI,还可以使用 Azure PowerShell、Azure 门户和 REST API。 若要了解其他部署方法,请参阅部署模板

查看已部署的资源

  1. 若要验证部署,请运行下述用于列出资源的命令,然后在输出中查找新预配服务和 IoT 中心:

     az resource list -g "${projectName}rg"
    
  2. 若要验证中心是否已链接到 DPS 资源,请运行以下 DPS extension show 命令

     az iot dps show --name <Your provisioningServiceName>
    

    请注意 iotHubs 成员上链接的中心。

清理资源

本教程系列中的其他快速入门教程是在本文的基础上制作的。 如果打算继续学习后续的快速入门或相关教程,请不要清理在本快速入门中创建的资源。 如果不打算继续,可以使用 Azure 门户或 Azure CLI 删除资源组及其所有资源。

若要从 Azure 门户中删除资源组及其所有资源,只需打开资源组并选择顶部的“删除资源组”。

删除使用 Azure CLI 部署的资源组:

az group delete --name "${projectName}rg"

还可以使用以下任一选项删除资源组和单个资源:

  • Azure 门户
  • PowerShell
  • REST API
  • 为 Azure 资源管理器或 IoT 中心设备预配服务发布的受支持平台 SDK

后续步骤

在本快速入门中,你已部署 IoT 中心和设备预配服务实例,并链接了这两个资源。 若要了解如何使用此设置来预配设备,请继续学习本快速入门中关于如何创建设备的内容。