次の方法で共有


チュートリアル: Raspberry Pi 3 B+ リファレンス イメージを使用した Azure IoT Hub のデバイス更新

Device Update for Azure IoT Hub では、イメージベース、パッケージベース、スクリプトベースの更新がサポートされています。

イメージ更新を使用すると、デバイスの最終状態の信頼性が高くなります。 通常、運用前環境と運用環境の間でイメージの更新の結果をレプリケートする方が簡単です。これは、パッケージとその依存関係と同じ課題が生じないためです。 アトミックな性質のため、A/B フェールオーバー モデルを簡単に導入することもできます。

このチュートリアルでは、Raspberry Pi 3 B+ ボードで Device Update for IoT Hub を使用して、エンドツーエンドのイメージ ベースの更新を完了する手順について説明します。

このチュートリアルで学習する内容は次のとおりです。

  • イメージをダウンロードします。
  • IoT デバイスにタグを追加します。
  • 更新プログラムをインポートする
  • デバイス グループを作成します。
  • イメージの更新プログラムをデプロイします。
  • 更新プログラムのデプロイを監視する

このチュートリアルのイメージの更新は、Raspberry Pi B3 ボードで検証されました。

[前提条件]

まだ作成していない場合は、 Device Update アカウントとインスタンス を作成し、IoT ハブを構成します。

イメージをダウンロードする

Device Update GitHub リリース ページの Assets にサンプル イメージが用意されています。 .gz ファイルは、Raspberry Pi 3 B+ ボードにフラッシュできる基本イメージです。 swUpdate ファイルは、Device Update for IoT Hub からインポートする更新プログラムです。

画像を含む SD カードをフラッシュする

お気に入りの OS フラッシュ ツールを使用して、Raspberry Pi 3 B+ デバイスで使用される SD カードに Device Update 基本イメージ (adu-base-image) をインストールします。

bmaptool を使用して SDカードに書き込みを行う

  1. まだインストールしていない場合は、 bmaptool ユーティリティをインストールします。

    sudo apt-get install bmap-tools
    
  2. /devで SD カードのパスを見つけます。 パスは、 /dev/sd* または /dev/mmcblk*のようになります。 dmesg ユーティリティを使用すると、正しいパスを探しやすくなります。

  3. フラッシュする前に、マウントされているすべてのパーティションをマウント解除します。

    sudo umount /dev/<device>
    
  4. デバイスへの書き込みアクセス許可があることを確認します。

    sudo chmod a+rw /dev/<device>
    
  5. 省略可能: フラッシュを高速化するために、bimap ファイルとイメージ ファイルをダウンロードし、同じディレクトリに配置します。

  6. SD カードをフラッシュします。

    sudo bmaptool copy <path to image> /dev/<device>
    

Azure IoT Hub ソフトウェアの Device Update には、次のライセンス条項が適用されます。

エージェントを使用する前に、ライセンス条項をお読みください。 インストールと使用は、これらの条件に同意したものになります。 ライセンス条項に同意しない場合は、Device Update for IoT Hub エージェントを使用しないでください。

IoT Hub でデバイスまたはモジュールを作成し、接続文字列を取得する

次に、デバイスを IoT Hub に追加します。 IoT Hub 内から、デバイスの接続文字列が生成されます。

  1. Azure portal から IoT Hub を起動します。

  2. 新しいデバイスを作成します。

  3. 左側のペインで、[デバイス] を選択します。 続いて、新規を選択します。

  4. [デバイス ID] にデバイスの名前を入力します。 [キーの自動生成] チェックボックスがオンになっていることを確認します。

  5. 保存 を選択します。 [ デバイス ] ページで、作成したデバイスが一覧に表示されます。

  6. 次の 2 つのオプションのいずれかを使用して、デバイス接続文字列を取得します。

    • オプション 1: モジュール ID で Device Update エージェントを使用する: 同じ [デバイス ] ページで、上部にある [モジュール ID の追加] を選択します。 IoTHubDeviceUpdate という名前の新しい Device Update モジュールを作成します。 ユース ケースに適用されるその他のオプションを選択し、[ 保存] を選択します。 新しく作成したモジュールを選択します。 モジュール ビューで、[プライマリ接続文字列] の横にある [コピー] アイコンを選択します。
    • オプション 2: デバイス ID で Device Update エージェントを使用する: デバイス ビューで、プライマリ接続文字列の横にあるコピー アイコンを選択します。
  7. 次の手順で後で使用するために、コピーした文字をどこかに貼り付けます。

    このコピーされた文字列は、デバイスの接続文字列です

Device Update for IoT Hub のデバイス上の構成を準備する

Device Update for IoT Hub が正しく構成されるように、デバイス上に 2 つの構成ファイルが必要です。 最初のファイルは du-config.json ファイルであり、 /adu/du-config.jsonに存在する必要があります。 2 番目のファイルは、/adu/du-diagnostics-config.jsonに存在する必要があるdu-diagnostics-config.json ファイルです。

du-config.jsonファイルとdu-diagnostics-config.json ファイルの 2 つの例を次に示します。

du-config.json の例

   {
      "schemaVersion": "1.0",
      "aduShellTrustedUsers": [
         "adu",
         "do"
      ],
      "manufacturer": "fabrikam",
      "model": "vacuum",
      "agents": [
         {
         "name": "main",
         "runas": "adu",
         "connectionSource": {
            "connectionType": "string",
            "connectionData": "HostName=example-connection-string.azure-devices.net;DeviceId=example-device;SharedAccessKey=M5oK/rOP12aB5678YMWv5vFWHFGJFwE8YU6u0uTnrmU="
         },
         "manufacturer": "fabrikam",
         "model": "vacuum"
         }
      ]
   }  

du-diagnostics-config.json の例

   {
      "logComponents":[
         {
               "componentName":"adu",
               "logPath":"/adu/logs/"
         },
         {
               "componentName":"do",
               "logPath":"/var/log/deliveryoptimization-agent/"
         }
      ],
      "maxKilobytesToUploadPerLogPath":50
   }

Raspberry Pi で Device Update エージェントを構成する

  1. Raspberry Pi 3 がネットワークに接続されていることを確認します。

  2. 構成の詳細を追加するには、次の手順に従います。

    1. まず、PowerShell ウィンドウで次のコマンドを使用してマシンに SSH 接続します。

         ssh raspberrypi3 -l root
      
    2. 次を使用して、編集用の du-config.json ファイルを作成または開きます。

         nano /adu/du-config.json
      
    3. コマンドを実行すると、ファイルを含む開いているエディターが表示されます。 ファイルを作成したことがない場合は、空になります。 次に、上記の例 du-config.json 内容をコピーし、デバイスに必要な構成に置き換えます。 次に、接続文字列の例を、前の手順で作成したデバイスの接続文字列に置き換えます。

    4. 変更が完了したら、 Ctrl + X キーを押してエディターを終了します。 次に 、「y 」と入力して変更を保存します。

    5. 次に、同様のコマンドを使用して du-diagnostics-config.json ファイルを作成する必要があります。 まず、次を使用して、編集用の du-diagnostics-config.json ファイルを作成または開きます。

         nano /adu/du-diagnostics-config.json
      
    6. 前の例 du-diagnostics-config.json 内容をコピーし、既定のビルドとは異なる構成に置き換えます。 du-diagnostics-config.json ファイルの例は、Device Update for IoT Hub の既定のログの場所を表しています。 実装が異なる場合にのみ、これらを変更する必要があります。

    7. 変更が完了したら、 Ctrl + X キーを押してエディターを終了します。 次に 、「y 」と入力して変更を保存します。

    8. 次のコマンドを使用して、 /adu/ ディレクトリにあるファイルを表示します。 両方の構成 files.du-diagnostics-config.json ファイルを編集するために表示するには、以下を使用すべきです。

         ls -la /adu/
      
  3. デバイス更新システム デーモンを再起動して、構成が適用されたことを確認します。 raspberrypiにログインしているターミナル内で次のコマンドを使用します。

       systemctl start adu-agent
    
  4. 次のコマンドを使用して、エージェントがライブであることを確認します。

       systemctl status adu-agent
    

    ステータスが正常で緑であることを確認できるはずです。

Device Update for IoT Hub でデバイスを接続する

  1. 左側のペインで、[デバイス] を選択します。

  2. デバイス名を含むリンクを選択します。

  3. IoT デバイス ID を使用して Device Update に直接接続する場合は、ページの上部にある Device Twin を選択します。 それ以外の場合は、作成したモジュールを選択し、そのモジュール ツインを選択します。

  4. Device Twin プロパティの報告されたセクションで、Linux カーネルのバージョンを探します。 Device Update から更新プログラムを受信していない新しいデバイスの場合、 DeviceManagement:DeviceInformation:1.swVersion 値は、デバイスで実行されているファームウェアのバージョンを表します。 デバイスに更新プログラムが適用されると、Device Update は AzureDeviceUpdateCore:ClientMetadata:4.installedUpdateId プロパティ値を使用して、デバイスで実行されているファームウェアのバージョンを表します。

  5. 基本イメージ ファイルと更新イメージ ファイルのバージョン番号は、ファイル名に含まれています。

    adu-<image type>-image-<machine>-<version number>.<extension>
    

そのバージョン番号は、後の「更新プログラムをインポートする」セクションで使用します。

デバイスにタグを追加する

  1. Azure portal にサインインし、IoT ハブに移動します。

  2. 左側のウィンドウの [ デバイス] で、IoT デバイスを見つけて、デバイス ツインまたはモジュール ツインに移動します。

  3. Device Update エージェント モジュールの [モジュール ツイン] で、既存の Device Update タグ値を null 値に設定して削除します。 デバイス更新エージェントでデバイス ID を使用している場合は、デバイス ツインでこれらの変更を行います。

  4. 次に示すように、Device Update の新しいタグ値を追加します。

        "tags": {
                "ADUGroup": "<CustomTagValue>"
                }
    

更新プログラムをインポートする

  1. 最新のエージェントの リリース アセット からサンプル チュートリアル マニフェスト (チュートリアル Manifest_Pi.jsonのインポート) とサンプル更新プログラム (adu-update-image-raspberrypi3-0.6.5073.1.swu) をダウンロードします。

  2. Azure portal にサインインし、Device Update がある IoT Hub に移動します。 左側のウィンドウの [デバイスの自動管理]の下で、[更新プログラム] を選択します。

  3. [Updates] タブを選択します。

  4. [+ 新しい更新プログラムのインポート] を選択します。

  5. [+ ストレージ コンテナーから選択] を選択します。 [+ ストレージ アカウント] を使用して、既存のストレージ アカウントを選択するか、新しいストレージ アカウントを作成します。 次に、既存のコンテナーを選択するか、[+ コンテナー] を使用して新しいコンテナーを作成します。 このコンテナーは、インポート用に更新ファイルをステージするために使用されます。

    以前の更新プログラムから誤ってファイルをインポートしないように、更新プログラムをインポートするごとに新しいコンテナーを使用することをお勧めします。 新しいコンテナーを使用しない場合は、この手順を実行する前に、既存のコンテナーからファイルを削除してください。

    ストレージ アカウントとコンテナーを示すスクリーンショット。

  6. コンテナーで [アップロード] を選択し、手順 1 でダウンロードしたファイルに移動します。 すべての更新ファイルを選択したら、[ アップロード] を選択します。 続いて [選択] ボタンを選択して、[更新プログラムのインポート] ページに戻ります。

    アップロード済みファイルの選択を示すスクリーンショット。

    このスクリーンショットは、インポートの手順を示しています。 ファイル名は、例で使用されているものと一致しない場合があります。

  7. [更新プログラムのインポート] ページで、インポートするファイルを確認します。 次に、[更新プログラムのインポート] を選択してインポート プロセスを開始します。

    更新プログラムのインポートを示すスクリーンショット。

  8. インポート プロセスが開始され、画面が [ インポート履歴 ] セクションに切り替わります。 [状態] 列にインポートが正常に完了したことが表示されたら、[使用可能な更新プログラム] 見出しを選択します。 インポートされた更新プログラムが一覧に表示されるはずです。

    ジョブの状態を示すスクリーンショット。

更新プログラムをインポートする方法の詳細については、 を参照してください。

更新グループの作成

  1. ページの上部にある [グループとデプロイ] タブに移動します。

    グループ化されていないデバイスを示すスクリーンショット。

  2. [ グループの追加] を選択して新しいグループを作成します。

    デバイス グループの追加を示すスクリーンショット。

  3. 一覧から IoT Hub タグと Device クラス を選択します。 次に [グループの作成] を選択します。

    タグの選択を示すスクリーンショット。

  4. グループが作成されると、更新プログラムのコンプライアンス チャートとグループの一覧が更新されます。 更新プログラムのコンプライアンス チャートには、さまざまなコンプライアンス対応状態 (最新の更新状態利用可能な新しい更新プログラムがある更新プログラムのインストールが進行中) にあるデバイスの数が表示されます。 更新プログラムのコンプライアンスの詳細についてはこちらを参照してください。

    [更新] のコンプライアンス ビューを示すスクリーンショット。

  5. 新しく作成されたグループと、新しいグループ内のデバイスで利用可能な更新プログラムが表示されます。 グループのデバイス クラス要件を満たしていないデバイスがある場合は、対応する無効なグループに表示されます。 このビューから新しいユーザー定義グループに最適な利用可能な更新プログラムをデプロイするには、グループの横にある [デプロイ] を選択します。

タグを追加して更新グループを作成する方法の詳細については、 を参照してください。

更新プログラムをデプロイする

  1. グループが作成されると、デバイス グループで使用できる新しい更新プログラムが表示されます。 更新プログラムへのリンクは、[ ベスト 更新プログラム] の下にある必要があります。 場合によっては、一度最新の情報に更新する必要があります。 更新プログラムのコンプライアンスの詳細についてはこちらを参照してください。

  2. グループ名を選択してターゲット グループを選択します。 [グループの基本] の下にグループの詳細が表示されます。

    [グループの詳細] を示すスクリーンショット。

  3. デプロイを開始するには、[現在のデプロイ] タブに移動します。[利用可能な更新プログラム] セクションから、目的の更新プログラムの横にあるデプロイ リンクを選択します。 特定のグループに最適な使用可能な更新プログラムには、最適 の強調表示が付けられます。

    更新の選択を示すスクリーンショット。

  4. デプロイを直ちに開始するか、後で開始するようにスケジュールします。 [作成] を選択します。

    [作成] ボタンを示すスクリーンショット。

  5. デプロイの詳細 で、状態 アクティブ に変わります。 デプロイされた更新プログラムには (デプロイ中) のマークが付きます。

    アクティブなデプロイを示すスクリーンショット。

  6. コンプライアンス チャートを表示して、更新が進行中であることを確認します。

  7. デバイスが正常に更新されると、コンプライアンス チャートとデプロイの詳細が、同じ内容を反映するように更新されていることがわかります。

    更新が成功したことを示すスクリーンショット。

更新プログラムのデプロイを監視する

  1. ページの上部にある [デプロイの履歴] タブを選択します。

    [デプロイの履歴] を示すスクリーンショット。

  2. 作成したデプロイの横にある [詳細] を選択します。

    [デプロイの詳細] を示すスクリーンショット。

  3. [最新の情報に更新] を選択して、最新の状態の詳細を表示します。

これで、Raspberry Pi 3 B+ デバイスで Device Update for IoT Hub を使用して、エンドツーエンドのイメージ更新が正常に完了しました。

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

不要になったら、Device Update アカウント、インスタンス、IoT ハブ、IoT デバイスをクリーンアップします。

次のステップ