次の方法で共有


チュートリアル: Raspberry Pi 3 B+ 参照イメージを使用した Device Update for 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 リリース ページの「アセット」にサンプル イメージが用意されています。 .gz ファイルは、Raspberry Pi 3 B+ ボードにフラッシュできる基本イメージです。 .gz ファイルは、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>
    

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

エージェントを使用する前に、ライセンス条項をお読みください。 インストールして使用すると、これらの条項に同意したものと見なされます。 ライセンス条項に同意しない場合は、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 つの構成ファイルが必要です。 1 つ目のファイルは、/adu/du-config.json に存在する必要がある 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/ ディレクトリにあるファイルを表示します。 両方の構成ファイルが表示されます (編集用の du-diagnostics-config.json ファイルなど)。

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

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

       systemctl status adu-agent
    

    状態が活動中として緑色で返されるのが表示されます。

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

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

  2. お使いのデバイス名が含まれるリンクを選択します。

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

  4. [デバイス ツイン] プロパティの 「reported」 セクションで、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 値に設定して削除します。 Device Update エージェントでデバイス ID を使用している場合は、[デバイス ツイン] でそれらの変更を行います。

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

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

更新プログラムのインポート

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

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

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

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

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

    注意

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

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

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

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

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

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

    [更新のインポート] を示すスクリーンショット。

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

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

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

更新グループの作成

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

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

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

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

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

    タグ セレクションを示すスクリーンショット。

  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 デバイスをクリーンアップします。

次のステップ