次の方法で共有


チュートリアル: シミュレーター エージェントを使用した Azure Device Update for IoT Hub

Azure Device Update for IoT Hub では、イメージベース、パッケージベース、スクリプトベースの更新がサポートされています。 このチュートリアルでは、Ubuntu シミュレーター エージェントを使用する、エンド ツー エンドの Device Update イメージベース更新プログラムについて説明します。

イメージ更新プログラムはデバイスの最終状態に対する高い信頼性を提供し、パッケージベース更新プログラムやスクリプトベース更新プログラムのようにパッケージや依存関係の管理に関する問題を引き起こしません。 開発環境と運用環境の間でイメージ更新プログラムの結果を簡単にレプリケートすることや、A/B フェールオーバー モデルを簡単に採用することができます。

このチュートリアルでは、次の作業を行いました。

  • タグを使用して IoT デバイスを Device Update グループに割り当てます。
  • イメージ更新プログラムをダウンロードしてインストールします。
  • イメージ更新プログラムをインポートします。
  • イメージ更新プログラムをデプロイします。
  • 更新プログラムのデプロイ履歴を表示します。

前提条件

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

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

  1. Azure portal で、Device Update インスタンスに関連付けられている IoT ハブ ページを開きます。
  2. ナビゲーション ウィンドウで [デバイス管理]>[デバイス] の順に選択します。
  3. [デバイス] ページで [デバイスの追加] を選択します。
  4. [デバイス ID] にデバイスの名前を入力します。 [キーの自動生成] チェックボックスがオンになっていることを確認します。
  5. [保存] を選択します。 [デバイス] ページの一覧にデバイスが表示されます。

モジュール ID を作成する

デバイスを登録したら、モジュール ID を作成します。 モジュールは IoT デバイス コンポーネントの独立した ID です。これにより、デバイスが複数のプロセスを実行するときにより高度な細分性を実現できます。

このチュートリアルでは、デバイスで実行される Device Update エージェントのモジュール ID を作成します。 詳細については、「IoT Hub のモジュール ツインの理解と使用」を参照してください。

  1. [デバイス] ページで、登録したデバイスを選択します。
  2. [デバイス] ページで、[モジュール ID の追加] を選択します。
  3. [モジュール ID の追加] ページの [モジュール ID 名] で、モジュールに「DeviceUpdateAgent」などの名前を入力します。
  4. [保存] を選択します。 新しいモジュール ID は、デバイス ページの [モジュール ID] に表示されます。
  5. モジュール名を選択し、[モジュール ID の詳細] ページで、[接続文字列 (主キー)] の横にある [コピー] アイコンを選択します。 Device Update エージェントを構成する際に使用するために、このモジュール接続文字列を保存します。

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

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

Device Update により管理される任意のデバイスにタグを割り当て、そのデバイスを Device Update グループに割り当てることができます。 タグは、このチュートリアルのようにデバイス ツインまたはモジュール ツインに含めることができます。 各デバイスは、1 つの Device Update グループにのみ割り当てることができます。

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

  2. [モジュール ID ツイン] ページで、次のように、modelId および version と同じレベルの新しい DeviceUpdateGroup タグを JSON コードに追加します。

    "tags": {
        "DeviceUpdateGroup": "DU-simulator-tutorial"
    },
    
  3. [保存] を選択します。 ポータルによりモジュール ツインの形式が再設定され、タグが JSON 構造に組み込まれます。

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

Device Update エージェントは、Device Update が管理するすべてのデバイスで実行されます。 このチュートリアルでは、Ubuntu 18.04 デバイスに Device Update エージェントをインストールし、シミュレーターとして実行するように構成し、デバイス構成を変更せずにデバイスに更新プログラムを適用する方法を示します。

Note

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

  1. 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. du-config.json エージェント構成ファイルを開きます。

    sudo nano /etc/adu/du-config.json
    
  4. 次の例の値で du-config.json を更新します。 <connection string> プレースホルダーを、モジュール ID からコピーした接続文字列に置き換えます。 パラメーターの詳細については、「Device Update 構成ファイル」を参照してください。

    • manufacturer: "contoso"
    • model: "video"
    • agents.name: "aduagent"
    • agents.connectionData: <connection string>
    • agents.manufacturer: "contoso"
    • agents.model: "video"

    編集した du-config.json ファイルは次のようになります。

    {
       "schemaVersion": "1.0",
       "aduShellTrustedUsers": [
          "adu",
          "do"
       ],
       "manufacturer": "contoso",
       "model": "video",
       "agents": [
          {
          "name": "aduagent",
          "runas": "adu",
          "connectionSource": {
             "connectionType": "string",
             "connectionData": <connection string>
          },
          "manufacturer": "contoso",
          "model": "video"
          }
       ]
    }
    
  5. [Ctrl]+[X] を押してエディターを終了し、「y」 を入力して変更を保存します。

  6. シミュレーターとして実行するようにエージェントを設定するには、IoT デバイスで次のコマンドを実行します。 Device Update エージェントは、シミュレーター ハンドラーを呼び出して、Microsoft SWUpdate 拡張機能を使用する更新プログラムを処理します。

      sudo /usr/bin/AducIotAgent --extension-type updateContentHandler --extension-id 'microsoft/swupdate:1' --register-extension /var/lib/adu/extensions/sources/libmicrosoft_simulator_1.so
    

シミュレーター ファイルを取得する

  1. [GitHub Device Update リリース][最新リリース][アセット] セクションから Ubuntu 18.04 コンピューターに Tutorial_Simulator.zip アーカイブをダウンロードして抽出します。

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

    wget https://github.com/Azure/iot-hub-device-update/releases/download/<release_version>/Tutorial_Simulator.zip
    
  2. 抽出した Tutorial_Simulator フォルダーから sample-du-simulator-data.json ファイルを tmp フォルダーにコピーします。

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

    Note

    tmp フォルダーが存在しない場合は、次のように作成します。

    sudo mkdir/tmp
    sudo chown root:root/tmp
    sudo chmod 1777/tmp
    
  3. /tmp/sample-du-simulator-data.json ファイルのアクセス許可を変更します。

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

     sudo systemctl restart deviceupdate-agent
    

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

Ubuntu 18.04 IoT デバイスと異なる場合は、[GitHub Device Update リリース][最新リリース][アセット] セクションから Ubuntu 18.04 コンピューターに Tutorial_Simulator.zip アーカイブをダウンロードして抽出します。 このセクションでは、 TutorialImportManifest_Sim.importmanifest.jsonTutorial_Simulator フォルダーからの adu-update-image-raspberrypi3.swu ファイルを使用します。

更新ファイルは、「Raspberry Pi チュートリアル」にあるものと同じです。 このチュートリアルでは更新がシミュレートされているため、特定のファイルの内容は問題になりません。

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

  2. ナビゲーション ウィンドウで [デバイス管理]>[更新プログラム] の順に選択します。

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

  4. [更新プログラムのインポート] ページで [ストレージ コンテナー から選択] を選択します。

  5. 既存のストレージ アカウントを選択するか、[ストレージ アカウント] を選択して新しいストレージ アカウントを作成します。

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

    Note

    以前の更新プログラムから誤ってファイルをインポートしないように、更新プログラムをインポートするごとに新しいコンテナーを使用します。 新しいコンテナーを使用しない場合は、必ず既存のコンテナーからあらゆるファイルを削除します。

  7. [コンテナー] ページで [アップロード] を選択します。 TutorialImportManifest_Sim.importmanifest.jsonadu-update-image-raspberrypi3.swu ファイルを参照して選択してから、[アップロード] を選択します。

  8. 両方のファイルのチェックボックスを選択し、[選択] をクリックして、[更新プログラムのインポート] ページに戻ります。

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

  9. [更新プログラムのインポート] ページで、インポートするファイルを確認し、[更新プログラムのインポート] を選択します。

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

    インポート プロセスが開始されたら、[インポート履歴の表示] を選択してインポート履歴と状態を表示できます。 [更新の履歴] ページの [ステータス] フィールドには、インポートが完了すると "成功" と表示されます。 [最新の情報に更新] を選択して状態を更新できます。

インポートされた更新プログラムが [更新プログラム] ページに表示されるようになりました。

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

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

デバイス グループを選択する

デバイスに適用したグループ タグを使用して、デバイス グループに更新プログラムをデプロイできます。 [更新プログラム] ページの上部にある [グループとデプロイ] タブを選択して、グループおよびデプロイの一覧と更新プログラムのコンプライアンス グラフを表示します。

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

[グループ名] の下に、この IoT ハブに接続されているデバイスのすべてのデバイス グループと利用可能な更新プログラムの一覧が表示され、更新プログラムをデプロイするためのリンクが [状態] の下に表示されます。 グループのデバイス クラスの要件を満たしていないデバイスは、対応する無効なグループに表示されます。 タグとグループの詳細については、デバイス グループの管理に関する記事を参照してください。

このチュートリアルで設定したシミュレーションされたデバイスを含むデバイス グループが表示されているはずです。 グループ名を選んで、その詳細を表示します。

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

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

  1. [グループの詳細] ページに、このグループで使用可能な新しい更新プログラムが 1 つ表示されます。 [デプロイ] を選んで、デプロイを始めます。

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

  2. インポートした更新プログラムは、このグループに最適な更新プログラムとして一覧表示されます。 [デプロイ] を選択します。

  3. デプロイをすぐに開始するようにスケジュールし、[作成] を選択します。

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

  5. デバイスが正常に更新されたら、[更新プログラム] ページに戻ります。 コンプライアンス チャートとデプロイの詳細が更新され、インストールされている更新プログラムが含まれていることがわかります。

更新プログラムのデプロイ履歴を表示する

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

  2. 作成したデプロイの横にある [デプロイの詳細の表示] を選びます。 [最新の情報に更新] を選択して、最新の状態の詳細を表示します。

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

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

次のチュートリアルに進む場合は、Device Update と IoT Hub リソースをそのままにします。 このチュートリアル用に作成したリソースは、不要になったら削除できます。

  1. Azure portal で、リソースが含まれるリソース グループに移動します。
  2. グループのすべてのリソースを削除する場合は、[リソース グループの削除] を選びます。
  3. リソースの一部のみを削除する場合は、チェック ボックスを使用してリソースを選択してから、[削除] を選択します。