チュートリアル: Ubuntu (18.04 x64) Simulator Reference Agent を使用した Device Update for Azure IoT Hub

このチュートリアルでは、Device Update for IoT Hub を使用したエンド ツー エンドのイメージベースの更新を見ていただきます。 Device Update for Azure IoT Hub では、イメージベース、パッケージベース、スクリプトベースの更新がサポートされています。

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

このチュートリアルでは、次の方法について説明します。

  • タグを使って、IoT デバイスを Device Update グループに割り当てます。
  • イメージをダウンロードしてインストールします。
  • 更新プログラムをインポートする
  • イメージの更新プログラムをデプロイします。
  • 更新プログラムのデプロイを監視する

前提条件

  • IoT ハブで構成された Device Update アカウントとインスタンス を作成する。

  • Ubuntu 18.04 デバイスを持っている。 このデバイスは、物理マシンまたは仮想マシンのいずれかです。

  • 最新リリースのリリース アセットから Tutorial_Simulator.zip という名前の ZIP ファイルをダウンロードして、解凍します。

    テスト デバイスが開発用マインと異なる場合は、zip ファイルを両方にダウンロードします。

    wget を使用して zip ファイルをダウンロードできます。 <release_version> は、1.0.0 などの最新のリリースに置き換えてください。

    wget https://github.com/Azure/iot-hub-device-update/releases/download/<release_version>/Tutorial_Simulator.zip
    

デバイスを登録してモジュール ID を構成する

IoT ハブのデバイス レジストリにデバイスを追加します。 IoT ハブに接続するすべてのデバイスを登録する必要があります。

このセクションでは、モジュール ID も作成します。 モジュールは、IoT デバイス上に存在するコンポーネントの独立した ID であり、複数のプロセスを実行する IoT デバイスがある場合に、より細かい細分性を実現できます。 このチュートリアルでは、IoT デバイスで実行される Device Update エージェントにこのモジュール ID を使います。 詳細については、「IoT Hub のモジュール ツインの理解と使用」を参照してください。

  1. Azure portal で、ご使用の IoT ハブに移動します。
  2. 左側のペインで、[デバイス] を選択します。 次に、[デバイスの追加] を選びます。
  3. [デバイス ID] にデバイスの名前を入力します。 [キーの自動生成] チェックボックスがオンになっていることを確認します。
  4. [保存] を選択します。
  5. [デバイス] ページに戻ると、作成したデバイスが一覧に表示されているはずです。 そのデバイスを選択します。
  6. [モジュール ID の追加] を選びます。
  7. [モジュール ID 名] に、モジュールの名前 (DUAgent など) を入力します。
  8. [保存] を選択する

モジュールの接続文字列をコピーする

  1. デバイス ビューの見出し [モジュール ID] の下の一覧に、新しいモジュールが表示されるはずです。 モジュール名を選んでその詳細を開きます。
  2. [接続文字列 (主キー)] の横にある [コピー] アイコンを選びます。 Device Update エージェントを構成するときに使うので、この接続文字列を保存しておきます。 この文字列は "モジュール接続文字列" です。

モジュール ツインにタグを追加する

  1. まだモジュール ID の詳細ページで、[モジュール ID ツイン] を選びます。

  2. 次に示すように、ツイン ファイルの modelId および version と同じレベルで新しい Device Update タグ値を追加します。

    "tags": {
        "ADUGroup": "DU-simulator-tutorial"
    },
    

    モジュール ツインの ADUGroup タグのスクリーンショット。

    Device Update によって管理されるすべてのデバイスには、デバイスを Device Update グループに割り当てるこの予約済みタグが必要です。 ここで示すように、これはデバイス ツインまたはモジュール ツインのどちらでもかまいません。 各デバイスは、1 つの Device Update グループにのみ割り当てることができます。

  3. [保存] を選択します。 ポータルにより、モジュール ツインの形式が再設定されて、タグが JSON 構造に組み込まれます。

Device Update エージェントをインストールして構成する

Device Update エージェントは、Device Update によって管理されるすべてのデバイスで実行されます。 このチュートリアルでは、デバイスの構成を実際に変更することなく、更新がデバイスにどのように適用されるかを確認できるよう、シミュレーターとして実行するように構成します。

  1. IoT デバイスで、Microsoft パッケージ リポジトリを追加してから、信頼できるキーの一覧に Microsoft パッケージ署名キーを追加します。

    wget https://packages.microsoft.com/config/ubuntu/18.04/multiarch/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb   
    
  2. Device Update エージェントの .deb パッケージをインストールします。

    sudo apt-get update
    sudo apt-get install deviceupdate-agent
    
  3. エージェントの構成ファイルを開きます。

    sudo nano /etc/adu/du-config.json
    
  4. 構成ファイルで次の値を更新します。

    • manufacturer: "Contoso" - この値は、更新の対象となる IoT デバイスを分類するために使われます。
    • model: "Video" - この値は、更新の対象となる IoT デバイスを分類するために使われます。
    • name: "aduagent"
    • agents.connectionData: モジュール ID からコピーした接続文字列を指定します。
    • agents.manufacturer: "Contoso"
    • agents.model: "Video"

    このステップでのパラメーターについて詳しくは、Device Update の構成ファイルに関する記事をご覧ください。

    注意

    IoT ID サービスを使ってデバイスをプロビジョニングすることもできます。 それを行うには、Device Update エージェントをインストールする前に IoT ID サービスをインストールします。 次に、構成ファイルで "connectionType": "AIS"connectionData を空の文字列にして Device Update エージェントを構成します。

  5. ファイルを保存して閉じます。 CTRL+X キー、Y キー、Enter キーを順番に押します。

  6. シミュレーターとして実行するようにエージェントを設定します。 IoT デバイスで次のコマンドを実行します。これにより、Device Update エージェントは、シミュレーター ハンドラーを呼び出して、SWUpdate (microsoft/swupdate:1) でパッケージの更新を処理します。

      sudo /usr/bin/AducIotAgent --extension-type updateContentHandler --extension-id 'microsoft/swupdate:1' --register-extension /var/lib/adu/extensions/sources/libmicrosoft_simulator_1.so
    
  7. 前提条件でダウンロードした Tutorial_Simulator.zip ファイルを解凍し、sample-du-simulator-data.json ファイルを tmp フォルダーにコピーします。

    cp sample-du-simulator-data.json /tmp/du-simulator-data.json
    

    /tmp が存在しない場合は、以下を実行します。

    sudo mkdir/tmp
    sudo chown root:root/tmp
    sudo chmod 1777/tmp
    
  8. 新しいファイルのアクセス許可を変更します。

    sudo chown adu:adu /tmp/du-simulator-data.json
    sudo chmod 664 /tmp/du-simulator-data.json
    
  9. Device Update エージェントを再起動して、変更を適用します。

     sudo systemctl restart deviceupdate-agent
    

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

このセクションでは、前提条件でダウンロードした Tutorial_Simulator.zip 内のファイル TutorialImportManifest_Sim.importmanifest.json および adu-update-image-raspberrypi3.swu を使用します。 更新ファイルは、Raspberry Pi チュートリアルから再利用されます。 このチュートリアルでは更新がシミュレートされているため、特定のファイルの内容は問題になりません。

  1. 開発用コンピューターで Azure portal にサインインし、Device Update で構成されている IoT ハブに移動します。

  2. ナビゲーション ウィンドウの [デバイス管理] で、[更新] を選びます。

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

  4. [ストレージ コンテナーから選択] を選びます。

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

    注意

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

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

  6. コンテナーで [アップロード] を選び、前提条件でダウンロードしたファイルに移動します。 TutorialImportManifest_Sim.importmanifest.jsonadu-update-image-raspberrypi3.swu ファイルを選んでから、[アップロード] を選びます。

  7. 各ファイルのチェックボックスをオンにしてから、[選択] ボタンを選んで [Import update] (更新プログラムのインポート) ページに戻ります。

    コンテナーにアップロードされたファイルの選択を示すスクリーンショット。

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

    更新プログラムとしてインポートされるアップロードされたファイルを示すスクリーンショット。

  9. インポート プロセスが開始され、画面が [インポートの履歴] セクションに切り替わります。 [状態] 列には、インポートの進行中は [実行中] と表示され、インポートが完了すると [成功] と表示されます。 状態を更新するには、[最新の情報に更新] ボタンを使います。

  10. [状態] 列にインポートが正常に完了したことが表示されたら、[使用可能な更新プログラム] 見出しを選択します。 インポートされた更新プログラムが一覧に表示されるはずです。

    使用可能な更新プログラムとして一覧に表示されている新しい更新プログラムを示すスクリーンショット。

インポート プロセスの詳細については、Device Update for IoT Hub への更新プログラムのインポートに関する記事を参照してください。

デバイス グループを表示する

Device Update ではグループを使用してデバイスを整理します。 割り当てられたタグと互換性プロパティに基づいて、Device Update で自動的にデバイスがグループに並べ替えられます。 各デバイスは 1 つのグループにのみ属しますが、グループには複数のサブグループを含めることができ、さまざまなデバイス クラスを並べ替えることができます。

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

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

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

    このチュートリアルで設定したシミュレートされたデバイスを含むデバイス グループと、新しいグループ内のデバイスで使用できる更新プログラムが表示されます。 グループのデバイス クラスの要件を満たしていないデバイスがある場合は、対応する無効なグループに表示されます。

タグとグループの詳細については、デバイス グループの管理に関する記事を参照してください。

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

  1. [グループとデプロイ] タブには、デバイス グループで使用できる新しい更新プログラムが表示されます。 [状態] の下に更新プログラムへのリンクが表示されます。 場合によっては、ページを更新する必要があります。

  2. グループ名を選んで、その詳細を表示します。

  3. グループの詳細ページでは、利用できる新しい更新プログラムが 1 つあることがわかります。 [デプロイ] を選んで、デプロイを始めます。

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

  4. 前のセクションでインポートした更新プログラムは、このグループで使用できる最適な更新プログラムとして一覧に表示されます。 [デプロイ] を選択します。

  5. デプロイをスケジュールするか、すぐに開始してから、[作成] を選びます。

  6. グループの詳細ページで、[現在の更新プログラム] タブに移動します。[デプロイの詳細] で、[状態][アクティブ] に変わります。

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

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

  1. グループの詳細ページに戻り、[デプロイ履歴] タブを選びます。

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

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

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

これで、Device Update for IoT Hub と Ubuntu (18.04 x64) Simulator Reference Agent を使用した、エンドツーエンドのイメージの更新が正常に完了しました。

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

次のチュートリアルに進む場合は、Device Update と IoT Hub リソースをそのままにします。

もう必要ないときは、Azure portal でこれらのリソースを削除してかまいません。

  1. Azure Portal で、リソース グループに移動します。

  2. 削除するリソースを選びます。

    • グループのすべてのリソースを削除する場合は、[リソース グループの削除] を選びます。
    • 選んだリソースのみを削除する場合は、チェック ボックスを使ってリソースを選んでから、[削除] を選びます。

次の手順

このチュートリアルでは、イメージ更新プログラムをインポートしてデプロイする方法について説明しました。 次に、デバイス パッケージを更新する方法について説明します。