Share via


デバイス管理の開始 (Azure CLI)

バックエンド アプリでは、Azure IoT Hub プリミティブ (デバイス ツインダイレクト メソッドなど) を使用して、デバイス上のデバイス管理アクションをリモートで開始および監視できます。 この記事では、IoT Hub を使用してデバイスのダイレクト メソッドを呼び出すために、Azure CLI とデバイスが連携する方法について説明します。

注意

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

ダイレクト メソッドを使用して、Azure CLI セッションからデバイス管理操作 (再起動、出荷時の設定へのリセット、ファームウェアの更新など) を開始します。 デバイスは次の操作を担当します。

  • IoT Hub から送信されたメソッド要求の処理。

  • デバイスでの対応するデバイス固有の操作の開始。

  • "報告されるプロパティ" を介した IoT Hub への状態更新の提供。

Azure CLI を使用してデバイス ツインのクエリを実行することで、デバイス管理操作の進行状況を報告できます。 ダイレクト メソッドの使用の詳細については、「cloud-to-device 通信に関するガイダンス」を参照してください。

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

  • シミュレートされたデバイスを作成するセッション。 シミュレートされたデバイスは、ダイレクト メソッドが呼び出されたときに状態コードと JSON ペイロードを返すように構成されます。

  • もう一方のセッションで作成されたシミュレートされたデバイスでダイレクト メソッドを呼び出すセッション。

前提条件

  • 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)」を参照してください。

Cloud Shell を準備する

Azure Cloud Shell を使用する場合は、まずそれを起動して構成する必要があります。 CLI をローカルで使用する場合は、「2 つの 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 ウィンドウのスクリーンショット。ツール バーの環境セレクターが強調表示されています。

2 つの CLI セッションを準備する

次に、2 つの Azure CLI セッションを準備する必要があります。 Cloud Shell を使用している場合は、これらのセッションを別々の Cloud Shell タブで実行します。 ローカル CLI クライアントを使用している場合は、別々の CLI インスタンスを実行します。 次のタスクには、別々の CLI セッションを使用します。

  • 最初のセッションでは、IoT ハブと通信する IoT デバイスをシミュレートします。
  • 2 番目のセッションでは、IoT ハブを使用して、シミュレートされたデバイスからダイレクト メソッドを呼び出します。

注意

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

  1. 最初の 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 を使用してください。

  2. 2 つ目の CLI セッションを開きます。 ブラウザーで Cloud Shell を使用している場合は、最初の CLI セッションのツール バーにある [新しいセッションを開く] アイコンを選択します。 CLI をローカルで使用している場合は、2 つ目の CLI インスタンスを開きます。

    Azure Cloud Shell ウィンドウのスクリーンショット。ツール バーの [新しいセッションを開く] アイコンが強調表示されています。

デバイスを作成してシミュレートする

このセクションでは、最初の CLI セッションで IoT ハブのデバイス ID を作成し、そのデバイス ID を使用してデバイスをシミュレートします。 シミュレートされたデバイスは、2 番目の CLI セッションで呼び出すダイレクト メソッドに応答します。

シミュレートされたデバイスを作成し開始するには以下を行います。

  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 device simulate コマンドを実行し、以下のプレースホルダーを対応する値に置き換えます。 このコマンドは、前の手順で作成したデバイス ID を使用してデバイスをシミュレートします。 シミュレートされたデバイスは、ダイレクト メソッドが呼び出されるたびに状態コードとペイロードを返すように構成されます。

    {DeviceName}。 シミュレートされたデバイスの名前。

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

    az iot device simulate --device-id {DeviceName} --hub-name {HubName} \
                           --method-response-code 201 \
                           --method-response-payload '{"result":"Direct method successful"}'
    

    ヒント

    az iot device simulate コマンドは、既定では、device-to-cloud メッセージを 3 秒のメッセージ間隔で 100 件送信します。 シミュレーションは、すべてのメッセージが送信されると終了します。 シミュレーションの実行時間を長くする場合は、--msg-count パラメーターを使用して、指定するメッセージ数を増やすか、--msg-interval パラメーターを使用して、より長いメッセージ間隔を指定できます。 コマンドをもう一度実行して、シミュレートされたデバイスを再起動することもできます。

ダイレクト メソッドを呼び出す

このセクションでは、2 番目の CLI セッションを使用して、最初の CLI セッションで実行されているシミュレートされたデバイスでダイレクト メソッドを呼び出します。

  1. 最初の CLI セッションでシミュレートされたデバイスが実行されていることを確認します。 そうでない場合は、「デバイスを作成してシミュレートする」に記載されている az iot device simulate コマンドをもう一度実行して再起動します。

  2. 2 番目の CLI セッションで、az iot hub invoke-device-method コマンドを実行し、以下のプレースホルダーを対応する値に置き換えます。 この例では、デバイスの既存のメソッドはありません。 このコマンドでは、シミュレートされたデバイスでサンプルのメソッド名を呼び出します。 このメソッドにより、状態コードとペイロードが応答で提供されます。

    {DeviceName}. シミュレートされたデバイスの名前。

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

    {MethodName}. ダイレクト メソッドの名前。 シミュレートされたデバイスには既存のメソッドがないため、このコマンド用に任意の名前を選択できます。

    az iot hub invoke-device-method --device-id {DeviceName} --hub-name {HubName} \
                                    --method-name {MethodName}
    
  3. 最初の CLI セッションで、出力にメソッド呼び出しが表示されていることを確認します。 次のスクリーンショットでは、az iot hub invoke-device-method CLI コマンドで、{DeviceName}{MethodName} のプレースホルダーにそれぞれ SampleDeviceSampleMethod を使用しました。

    メソッドが呼び出された後に出力が表示されている、シミュレートされたデバイスのスクリーンショット。

  4. 2 番目の CLI セッションで、呼び出されたメソッドから受信した状態コードとペイロードが出力に表示されていることを確認します。

    呼び出されたダイレクト メソッドの状態コードとペイロードを表示する Azure Cloud Shell ウィンドウのスクリーンショット。

ペイロードを使用してダイレクト メソッドを呼び出す

このセクションでは、2 番目の CLI セッションを使用してダイレクト メソッドを呼び出し、最初の CLI セッションで実行されているシミュレートされたデバイスにペイロードを提供します。

  1. 最初の CLI セッションでシミュレートされたデバイスが実行されていることを確認します。 そうでない場合は、「デバイスを作成してシミュレートする」に記載されている az iot device simulate コマンドをもう一度実行して再起動します。

  2. 2 番目の CLI セッションで、az iot hub invoke-device-method コマンドを実行し、以下のプレースホルダーを対応する値に置き換えます。 この例では、デバイスの既存のメソッドはありません。 このコマンドでは、シミュレートされたデバイスでサンプルのメソッド名を呼び出し、そのメソッドのペイロードを提供します。 このメソッドにより、状態コードとペイロードが応答で提供されます。

    {DeviceName}. シミュレートされたデバイスの名前。

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

    {MethodName}. ダイレクト メソッドの名前。 シミュレートされたデバイスには既存のメソッドがないため、このコマンド用に任意の名前を選択できます。

    az iot hub invoke-device-method --device-id {DeviceName} --hub-name {HubName} \
                                    --method-name {MethodName} \
                                    --method-payload '{ "SamplePayload": "PayloadValue" }'
    
  3. 最初の CLI セッションで、出力にメソッド呼び出しが表示されていることを確認します。 次のスクリーンショットでは、az iot hub invoke-device-method CLI コマンドで、{DeviceName}{MethodName} のプレースホルダーにそれぞれ SampleDeviceSampleMethod を使用しました。

    ペイロードを使用してメソッドが呼び出された後の出力が表示されている、シミュレートされたデバイスのスクリーンショット。

  4. 2 番目の CLI セッションで、呼び出されたメソッドから受信した状態コードとペイロードが出力に表示されていることを確認します。

    呼び出されたダイレクト メソッドの状態コードとペイロードを表示する Azure Cloud Shell ウィンドウのスクリーンショット。

次のステップ

Azure CLI を使用して IoT ソリューションを拡張し、デバイスでメソッドの呼び出しをスケジュールする方法については、ジョブのスケジュールとブロードキャストに関するページを参照してください。

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