Share via


Azure CLI を使用する IoT Hub のモジュール ID とモジュール ツインの概要

モジュール ID とモジュール ツインは、Azure IoT Hub のデバイス ID とデバイス ツインに似ていますが、より細かい粒度を指定できます。 Azure IoT Hub のデバイス ID とデバイス ツインを使うと、バックエンド アプリケーションでデバイスを構成し、そのデバイスの状態に関する可視性を提供できるのと同じように、モジュール ID とモジュール ツインを使うと、これらの機能がデバイスの個々のコンポーネントに対して提供されます。 複数のコンポーネントで構成され、この機能をサポートしているデバイス (オペレーティング システム デバイスやファームウェア デバイスなど) では、モジュール ID とモジュール ツインにより、各コンポーネントの構成と状態を分離することができます。

注意

この記事で説明されている機能は、Standard レベルの IoT Hub でのみ使用できます。 Basic および Standard または Free レベルの IoT Hub の詳細については、ソリューションに適した IoT Hub のレベルの選択に関するページを参照してください。

この記事では、Azure CLI セッションを作成する方法について説明します。次のことを行います。

  • デバイス ID を作成してから、そのデバイスのモジュール ID を作成します。

  • モジュール ID に関連付けられているモジュール ツインに必要なプロパティのセットを更新します。

前提条件

  • Azure CLI。 この記事のコマンドは、ブラウザーまたは (Windows Terminal などの) アプリで実行されるインタラクティブ CLI シェルである Azure Cloud Shell を使用して実行することもできます。 Cloud Shell を使用する場合は、何もインストールする必要はありません。 CLI をローカルで使用する場合、この記事では、Azure CLI バージョン 2.36 以降が必要です。 バージョンを確認するには、az --version を実行します。 Azure CLI をローカルにインストールまたはアップグレードするには、Azure CLI のインストールに関する記事を参照してください。

  • IoT Hub。 CLI または Azure portal を使って作成します。

  • ポート 8883 がファイアウォールで開放されていることを確認してください。 この記事のサンプルでは、ポート 8883 を介して通信する MQTT プロトコルを使用しています。 このポートは、企業や教育用のネットワーク環境によってはブロックされている可能性があります。 この問題の詳細と対処方法については、「IoT Hub への接続 (MQTT)」を参照してください。

モジュールの認証

モジュール ID の認証には、対称キーまたは X.509 証明書を使用することができます。 X.509 証明書認証の場合、モジュールの証明書には、CN=<deviceid>/<moduleid> のような書式のモジュールの共通名が含まれている 必要があります。 次に例を示します。

openssl req -new -key d1m1.key.pem -out d1m1.csr -subj "/CN=device01\/module01"

Cloud Shell を準備する

Azure Cloud Shell を使用する場合は、まずそれを起動して構成する必要があります。 CLI をローカル環境で使う場合は、「CLI セッションを準備する」セクションに進んでください。

  1. Azure portal のページ ヘッダーから Cloud Shell アイコンを選択します。

    Azure portal のページ ヘッダーのグローバル コントロールのスクリーンショット。Cloud Shell アイコンが強調表示されています。

    注意

    Cloud Shell を初めて使用する場合は、Cloud Shell を使用するために必要なストレージを作成するように求められます。 ストレージ アカウントと Microsoft Azure ファイル共有を作成するためのサブスクリプションを選択します。

  2. Cloud Shell ツール バーの環境セレクターを使用して、希望する CLI 環境を選択します。 この記事では、Bash 環境を使用します。 PowerShell 環境を使うこともできます。

    注意

    一部のコマンドは、Bash および PowerShell 環境では異なる構文または書式が必要です。 詳細については、「Azure CLI を正しく使用するためのヒント」を参照してください。

    Azure Cloud Shell ウィンドウのスクリーンショット。ツール バーの環境セレクターが強調表示されています。

CLI セッションを準備する

次に、Azure CLI セッションを準備する必要があります。 Cloud Shell を使っている場合は、[Cloud Shell] タブでセッションを実行します。ローカル CLI クライアントを使っている場合は、CLI インスタンスでセッションを実行します。

  1. Cloud Shell を使用している場合は、次の手順に進みます。 それ以外の場合は、CLI セッションで az login コマンドを実行して、Azure アカウントにサインインします。

    Cloud Shell を使用している場合は、Azure アカウントに自動的にサインインします。 Azure CLI セッションと IoT hub の間のすべての通信は認証および暗号化されます。 そのため、この記事では、接続文字列などの実際のデバイスで使用する追加の認証は必要ありません。 Azure CLI を使用したサインインについて詳しくは、「Azure CLI を使用してサインインする」をご覧ください。

    az login
    
  2. CLI セッションで、az extension add コマンドを実行します。 このコマンドにより、Azure CLI 用の Microsoft Azure IoT 拡張機能が CLI シェルにインストールされます。 この拡張機能により、IoT Hub、IoT Edge、IoT Device Provisioning Service (DPS) 固有のコマンドが Azure CLI に追加されます。 この拡張機能をインストールした後は、Cloud Shell セッションで再度インストールする必要はありません。

    az extension add --name azure-iot
    

    注意

    この記事では、azure-iot と呼ばれる、Azure IoT 拡張機能の最新バージョンを使用します。 従来のバージョンは azure-cli-iot-ext と呼ばれます。一度にインストールできるバージョンは 1 つだけです。 コマンド az extension list を使用すると、現在インストールされている拡張機能を確認できます。

    拡張機能の従来のバージョンを削除するには、az extension remove --name azure-cli-iot-ext を使用します。

    拡張機能の新しいバージョンを追加するには、az extension add --name azure-iot を使用します。

    インストール済みの拡張機能を表示するには、az extension list を使用してください。

デバイス ID とモジュール ID を作成する

このセクションでは、CLI セッションで IoT ハブ用のデバイス ID を作成してから、そのデバイス ID を使ってモジュール ID を作成します。 各デバイス ID の下に、最大で 50 のモジュール ID を作成できます。

デバイス ID とモジュール ID を作成するには:

  1. CLI セッションで、az iot hub device-identity create コマンドを実行します。以下のプレースホルダーを対応する値に置き換えます。 このコマンドで、モジュールのデバイス ID が作成されます。

    {DeviceName}。 デバイスの名前。

    {HubName}。 IoT Hub の名前です。

    az iot hub device-identity create --device-id {DeviceName} --hub-name {HubName} 
    
  2. CLI セッションで、az iot hub module-identity create コマンドを実行します。以下のプレースホルダーを対応する値に置き換えます。 このコマンドにより、前のステップで作成したデバイス ID の下に、モジュールのモジュール ID が作成されます。

    {DeviceName}。 デバイスの名前。

    {HubName}。 IoT Hub の名前です。

    {ModuleName}. デバイスのモジュールの名前。

    az iot hub module-identity create --device-id {DeviceName} --hub-name {HubName} \
                                      --module-id {ModuleName}
    

モジュール ツインを更新する

モジュール ID が作成されると、IoT Hub 内でモジュール ツインが暗黙的に作成されます。 このセクションでは、CLI セッションを使い、前のセクションで作成したモジュール ID に関連付けられたモジュール ツインで、一連の必要なプロパティを更新します。

  1. CLI セッションで、az iot hub module-twin update コマンドを実行します。以下のプレースホルダーを対応する値に置き換えます。 この例では、前のセクションで作成したモジュール ID のモジュール ツインで、複数の必要なプロパティを更新します。

    {DeviceName}。 デバイスの名前。

    {HubName}。 IoT Hub の名前です。

    {ModuleName}. デバイスのモジュールの名前。

    az iot hub module-twin update --device-id {DeviceName} --hub-name {HubName} \
                                  --module-id {ModuleName} \
                                  --desired '{"conditions":{"temperature":{"warning":75, "critical":100}}}'
    
  2. CLI セッションで、JSON 応答に更新操作の結果が表示されていることを確認します。 次の JSON 応答の例では、az iot hub module-twin update CLI コマンドで、{DeviceName}{ModuleName} のプレースホルダーにそれぞれ SampleDeviceSampleModule を使いました。

    {
      "authenticationType": "sas",
      "capabilities": null,
      "cloudToDeviceMessageCount": 0,
      "connectionState": "Disconnected",
      "deviceEtag": "Mzg0OEN1NzW=",
      "deviceId": "SampleDevice",
      "deviceScope": null,
      "etag": "AAAAAAAAAAI=",
      "lastActivityTime": "0001-01-01T00:00:00+00:00",
      "modelId": "",
      "moduleId": "SampleModule",
      "parentScopes": null,
      "properties": {
        "desired": {
          "$metadata": {
            "$lastUpdated": "2023-02-17T21:26:10.5835633Z",
            "$lastUpdatedVersion": 2,
            "conditions": {
              "$lastUpdated": "2023-02-17T21:26:10.5835633Z",
              "$lastUpdatedVersion": 2,
              "temperature": {
                "$lastUpdated": "2023-02-17T21:26:10.5835633Z",
                "$lastUpdatedVersion": 2,
                "critical": {
                  "$lastUpdated": "2023-02-17T21:26:10.5835633Z",
                  "$lastUpdatedVersion": 2
                },
                "warning": {
                  "$lastUpdated": "2023-02-17T21:26:10.5835633Z",
                  "$lastUpdatedVersion": 2
                }
              }
            }
          },
          "$version": 2,
          "conditions": {
            "temperature": {
              "critical": 100,
              "warning": 75
            }
          }
        },
        "reported": {
          "$metadata": {
            "$lastUpdated": "0001-01-01T00:00:00Z"
          },
          "$version": 1
        }
      },
      "status": "enabled",
      "statusReason": null,
      "statusUpdateTime": "0001-01-01T00:00:00+00:00",
      "tags": null,
      "version": 3,
      "x509Thumbprint": {
        "primaryThumbprint": null,
        "secondaryThumbprint": null
      }
    }
    

次のステップ

Azure CLI を使って IoT ソリューションを拡張し、デバイスでの更新をスケジュールする方法については、ジョブのスケジュールとブロードキャストに関する記事をご覧ください。

エンドツーエンドのイメージベースの更新など、IoT Hub とデバイス管理パターンの概要を引き続き確認するには、「Raspberry Pi 3 B+ 参照イメージを使用した Device Update for Azure IoT Hub」の記事を参照してください。