クイックスタート: ARM テンプレートを使用して IoT Hub デバイス プロビジョニング サービス (DPS) を設定する

Azure Resource Manager テンプレート (ARM テンプレート) を使用すると、デバイスのプロビジョニングに必要な Azure クラウド リソースをプログラムで設定できます。 これらの手順では、ARM テンプレートを使用して、IoT ハブと新しい IoT Hub デバイス プロビジョニング サービスを作成する方法を示します。 また、この IoT ハブは、テンプレートを使用して DPS リソースにリンクされます。 このリンクにより、DPS リソースは、構成されている割り当てポリシーに基づいてデバイスをハブに割り当てることができます。

Azure Resource Manager テンプレートは JavaScript Object Notation (JSON) ファイルであり、プロジェクトのインフラストラクチャと構成が定義されています。 このテンプレートでは、宣言型の構文が使用されています。 デプロイしようとしているものを、デプロイを作成する一連のプログラミング コマンドを記述しなくても記述できます。

このクイックスタートでは、Azure portalAzure CLI を使用して、リソース グループの作成とテンプレートのデプロイに必要なプログラムによる手順を実行します。 ただし、PowerShell、.NET、Ruby などのプログラミング言語を使用してこれらの手順を行い、テンプレートをデプロイすることもできます。

自分の環境が前提条件を満たしていて、ARM テンプレートを既に使い慣れている場合は、[Azure へのデプロイ] ボタンを選択すると、Azure portal でデプロイ用のテンプレートが開きます。

Button to deploy the Resource Manager template to Azure.

Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。

前提条件

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • 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 クイックスタート テンプレートからのものです。

Note

現在、新しい DPS リソースで加入契約を作成するための ARM テンプレートのサポートはありません。 その機能を希望する声が多く寄せられていることから現在、実装を検討中です。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.12.40.16777",
      "templateHash": "13184692430416822033"
    }
  },
  "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": "int",
      "defaultValue": 1,
      "metadata": {
        "description": "The number of IoT Hub units."
      }
    }
  },
  "variables": {
    "iotHubKey": "iothubowner"
  },
  "resources": [
    {
      "type": "Microsoft.Devices/IotHubs",
      "apiVersion": "2021-07-02",
      "name": "[parameters('iotHubName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('skuName')]",
        "capacity": "[parameters('skuUnits')]"
      },
      "properties": {}
    },
    {
      "type": "Microsoft.Devices/provisioningServices",
      "apiVersion": "2022-02-05",
      "name": "[parameters('provisioningServiceName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('skuName')]",
        "capacity": "[parameters('skuUnits')]"
      },
      "properties": {
        "iotHubs": [
          {
            "connectionString": "[format('HostName={0};SharedAccessKeyName={1};SharedAccessKey={2}', reference(resourceId('Microsoft.Devices/IotHubs', parameters('iotHubName')), '2021-07-02').hostName, variables('iotHubKey'), listkeys(resourceId('Microsoft.Devices/IotHubs', parameters('iotHubName')), '2021-07-02').value[0].primaryKey)]",
            "location": "[parameters('location')]"
          }
        ]
      },
      "dependsOn": [
        "[resourceId('Microsoft.Devices/IotHubs', parameters('iotHubName'))]"
      ]
    }
  ]
}

前のテンプレートでは、次の 2 つの Azure リソースが定義されています。

テンプレートのデプロイ

ポータルでのデプロイ

  1. 次の画像を選択して Azure にサインインし、デプロイ用のテンプレートを開きます。 このテンプレートにより、新しい IoT ハブと DPS リソースが作成されます。 新しい IoT ハブは DPS リソースにリンクされます。

    Button to deploy the Resource Manager template to Azure.

  2. 次の値を選択するか入力し、[確認および作成] を選択します。

    ARM template deployment parameters on the portal

    以下のフィールドで特に指定がない限り、既定値を使用して IoT ハブと DPS リソースを作成します。

    フィールド 説明
    サブスクリプション Azure サブスクリプションを選択します。
    リソース グループ [新規作成] を選択し、リソース グループの一意の名前を入力し、[OK] を選択します。
    リージョン リソースのリージョンを選択します。 たとえば、East US などとします。 回復性と信頼性を確保するために、Availability Zones をサポートするリージョンのいずれかにデプロイすることをお勧めします。
    IoT ハブ名 IoT ハブの名前を入力します。この名前は、 .azure-devices.net 名前空間内でグローバルに一意である必要があります。 このハブ名は、次のセクションでデプロイを検証するときに必要になります。
    Provisioning Service Name(プロビジョニング サービス名) 新しいデバイス プロビジョニング サービス (DPS) リソースの名前を入力します。 この名前は、 .azure-devices-provisioning.net 名前空間内でグローバルに一意である必要があります。 この DPS 名は、次のセクションでデプロイを検証するときに必要になります。
  3. 次の画面で利用規約を読みます。 すべての条件に同意する場合は、[作成] を選択します。

    デプロイの完了には少し時間がかかります。

    Azure portal だけでなく、Azure PowerShell、Azure CLI、および REST API を使用することもできます。 他のデプロイ方法については、「テンプレートのデプロイ」を参照してください。

Azure CLI を使用してデプロイする

Azure CLI を使用する場合は、バージョン 2.6 以降が必要です。 Azure CLI をローカルで実行している場合は、az --version を実行してバージョンを確認します。

Azure アカウントにサインインしてサブスクリプションを選択します。

  1. Azure CLI をポータルではなくローカルで実行している場合は、サインインする必要があります。 コマンド プロンプトでサインインするには、ログイン コマンドを実行します。

    az login
    

    指示に従って、コードを使用して認証し、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. centralus):" 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.net 名前空間内でグローバルに一意である必要があります。 このハブ名は、次のセクションでデプロイを検証するときに必要になります。
    provisioningServiceName 新しいデバイス プロビジョニング サービス (DPS) リソースの名前を入力します。 この名前は、 .azure-devices-provisioning.net 名前空間内でグローバルに一意である必要があります。 この DPS 名は、次のセクションでデプロイを検証するときに必要になります。

    Azure CLI は、テンプレートをデプロイするために使用します。 Azure CLI だけでなく、Azure PowerShell、Azure portal、REST API を使用することもできます。 他のデプロイ方法については、「テンプレートのデプロイ」を参照してください。

デプロイされているリソースを確認する

  1. デプロイを確認するには、次に示すリソースを一覧表示するコマンドを実行し、その出力で新しいプロビジョニング サービスと IoT ハブを探します。

     az resource list -g "${projectName}rg"
    
  2. ハブが DPS リソースに既にリンクされていることを確認するには、次の DPS 拡張 show コマンドを実行します。

     az iot dps show --name <Your provisioningServiceName>
    

    iotHubs メンバーにリンクされているハブを確認します。

リソースをクリーンアップする

このコレクションの他のクイックスタートは、このクイックスタートに基づいています。 引き続きクイックスタートまたはチュートリアルの作業を行う場合は、このクイックスタートで作成したリソースをクリーンアップしないでください。 続行する予定がない場合は、Azure portal または Azure CLI を使用して、リソース グループとそのすべてのリソースを削除してもかまいません。

Azure portal からリソース グループとそのすべてのリソースを削除するには、そのリソース グループを開き、上部の [リソース グループの削除] を選択します。

Azure CLI を使用して、デプロイ済みのリソース グループを削除するには:

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

次のいずれかのオプションを使用して、リソース グループと個々のリソースを削除することもできます。

  • Azure portal
  • PowerShell
  • REST API
  • Azure Resource Manager または IoT Hub Device Provisioning Service 用に公開されたサポート プラットフォーム SDK

次のステップ

このクイックスタートでは、IoT ハブと Device Provisioning Service インスタンスをデプロイし、この 2 つのリソースをリンクしました。 この設定を使用してデバイスをプロビジョニングする方法については、デバイスの作成に関するクイックスタートに進んでください。