Device Update for Azure IoT Hub では、イメージベース、パッケージベース、スクリプトベースの更新がサポートされています。 このチュートリアルでは、Device Update Ubuntu Server 22.04 x64 パッケージ エージェントを使用してエンド ツー エンドのパッケージ更新を実行し、Azure IoT Edge を更新する方法を示します。
パッケージ ベースの更新プログラムは、特定のデバイス コンポーネントまたはアプリケーションのみを変更することを対象としています。 これらの更新プログラムは、イメージ ベースの更新より帯域幅の消費量がより少なく、ダウンロードとインストールの時間がより短く済むので、デバイスのダウンタイムを減らし、イメージを作成するオーバーヘッドを回避できます。 パッケージベースの更新では、APT マニフェストが、指定されたパッケージおよびその依存関係を指定されたリポジトリからダウンロードしてインストールするために必要な情報を、Device Update エージェントに提供します。
このチュートリアルでは Microsoft Defender for IoT のインストールについて説明しますが、同様の手順を使用すれば、IoT Edge 自体やそれが使用するコンテナー エンジンなどのその他のパッケージを更新できます。 このチュートリアルで取り上げるツールと概念は、異なる OS プラットフォーム構成を使用する場合にも当てはまります。
このチュートリアルでは、次の作業を行いました。
- デバイス更新エージェントとその依存関係をダウンロードしてインストールする
- デバイスにグループ タグを追加します。
- パッケージの更新プログラムをインポートします。
- パッケージの更新プログラムをデプロイします。
- 更新プログラムのデプロイ履歴を表示します。
前提条件
デバイスの準備
Ubuntu 22.04 LTS 仮想マシン (VM) を短時間で設定するために、このチュートリアルでは便宜上、cloud-init ベースの Azure Resource Manager (ARM) テンプレートを使用します。 このテンプレートは、IoT Edge ランタイムと Device Update パッケージ エージェントの両方をインストールした後、指定した IoT Edge デバイスの接続文字列を使用して、プロビジョニング情報を使用してデバイスを自動的に構成します。 また、ARM テンプレートを使用すれば、セットアップを完了するために Secure Shell (SSH) セッションを開始する必要はありません。
このテンプレートを実行するには、次の [Azure へのデプロイ] ボタンを選択します。
次の情報を入力します。
- サブスクリプション: VM のデプロイ先のアクティブな Azure サブスクリプション。
- リソース グループ: VM とそのリソースを含める既存または新規のリソース グループ。
- リージョン: VM のデプロイ先の地理的リージョン。これは、リソース グループの場所が規定値となります。
- Dns ラベル プレフィックス: VM のホスト名に付けるプレフィックスの値。
- 管理者のユーザー名: デプロイ時にルート権限が与えられるユーザー名。
- 認証の種類: [sshPublicKey] または [パスワード] を選択します。
- [管理者パスワード]、[SSH 公開キー ソース]、[SSH キーの種類]、[キー ペア名]: 認証の種類の選択に基づくパスワードまたは SSH 公開キー情報。
- VM のサイズ: デプロイする VM のサイズ。
- Ubuntu のOS バージョン: [22_04-lts] のままにします。
- デバイスの接続文字列: 先ほどコピーした IoT Edge の接続文字列。
ページ下部にある [確認と作成] を選択します。 検証に成功したら、[作成] を選択してテンプレートのデプロイを開始します。
デプロイが正常に完了したことを確認し、デプロイの完了後、インストール後の処理と構成で IoT Edge とデバイス パッケージの更新エージェントがインストールされるまで数分待ちます。
選択したリソース グループに VM リソースが表示されます。
vm-0000000000000
という形式のコンピューター名をメモします。 VM 名を選択し、VM の [概要] ページで、[DNS 名] を書き留めます。これは<dnsLabelPrefix>
.<___location>.cloudapp.azure.com
形式です。
ヒント
設定後にこの VM に SSH 接続する場合は、コマンド ssh <admin username>@<DNS name>
を使用して、関連付けられている [DNS 名] を使用します。
Device Update エージェントを VM にインストールする
重要
Azure Device Update for IoT Hub ソフトウェアには、次のライセンス条項が適用されます。
エージェントを使用する前に、ライセンス条項を参照してください。 エージェントをインストールして使用すると、これらの条項に同意したものと見なされます。 ライセンス条項に同意しない場合は、Device Update エージェントを使用できません。
VM に Device Update エージェントをインストールするには、次のコマンドを実行します。
sudo apt-get install deviceupdate-agent
次のコマンドを使用して、du-config.json 構成の詳細ファイルを開きます。
sudo nano /etc/adu/du-config.json
ファイル内のすべての
<placeholder>
値を独自の構成に置き換えます。connectionType
を"AIS"
として設定し、connectionData
を空の文字列として設定します。 ファイルの例については、「du-config.json ファイル コンテンツの例」を参照してください。次のコマンドを実行して、Device Update エージェントを再起動します。
sudo systemctl restart deviceupdate-agent
Note
このデバイスでシミュレーター エージェントを以前に使用した場合は、次のコマンドを実行して APT ハンドラーを呼び出し、このチュートリアルの無線でのパッケージの更新をデプロイできます。
sudo /usr/bin/AducIotAgent --register-content-handler /var/lib/adu/extensions/sources/libmicrosoft_apt_1.so --update-type 'microsoft/apt:1'
デバイスにグループ タグを追加する
割り当てられたタグと互換性プロパティに基づいて、Device Update は自動的にデバイスをグループに整理します。 各デバイスは 1 つのグループにのみ属することができますが、グループには複数のサブグループを含めることができ、さまざまなデバイス クラスを並べ替えることができます。 タグとグループの詳細については、デバイス グループの管理に関する記事を参照してください。
Device Update インスタンスの Azure portal の [IoT Hub] ページで、左側のナビゲーションから [デバイス管理] >[デバイス] の順に選択します。
デバイスの [デバイス ツイン] または [モジュール ID] ツインに移動します。
デバイス ツインまたは Device Update エージェントの [モジュール ID ツイン] ファイルで、既存の Device Update タグ値を
null
値に設定して削除し、以下の新たな Device Update グループ タグに追加します。Device Update エージェントでデバイス ID を使用している場合は、デバイス ツインでそれらの変更を行います。 Device Update エージェント モジュールでモジュール ID を使用している場合は、[モジュール ID ツイン] でタグを追加します。
"tags": { "ADUGroup": "<GroupTagValue>" },
次のスクリーンショットは、タグを追加するファイル内の場所を示しています。
[保存] を選択します。
更新プログラムをインポートする
Tutorial_IoTEdge_PackageUpdate.zip ファイルには、チュートリアルに必要なファイルが含まれています。
GitHub の Device Update リリース ページの最新リリースの [アセット] セクションから Tutorial_IoTEdge_PackageUpdate.zip ファイルをダウンロードします。
ファイルを解凍します。 抽出した Tutorial_IoTEdge_PackageUpdate フォルダーには、sample-defender-iot-apt-manifest.json サンプル APT マニフェストとそれに対応する sample-defender-iot--importManifest.json インポート マニフェストが含まれています。
Device Update インスタンスの Azure portal の [IoT Hub] ページで、左側のナビゲーションから [デバイス管理]>[更新プログラム] の順に選択します。
[更新プログラム] ページで [新しい更新プログラムのインポート] を選択します。
[更新プログラムのインポート] ページで [ストレージ コンテナー から選択] を選択します。
[ストレージ アカウント] ページで、既存のストレージ アカウントを選択するか、[ストレージ アカウント] を選択して新しいアカウントを作成します。
[コンテナー] ページで、既存のコンテナーを選択するか、[コンテナー] を選択して新しいコンテナーを作成します。 コンテナーを使用して、インポート用の更新プログラム ファイルをステージングします。
ヒント
以前の更新プログラムから誤ってファイルをインポートしないように、更新プログラムをインポートするごとに新しいコンテナーを使用します。 新しいコンテナーを使用しない場合は、既存のコンテナーからファイルを削除します。
コンテナー ページで、[アップロード] を選択し、ダウンロードした更新ファイルをドラッグ アンド ドロップするか参照して選択し、[アップロード] を選択します。 アップロードすると、ファイルがコンテナー ページに表示されます。
インポートするファイルを確認して選択し、[選択] を選択します。
[更新プログラムのインポート] 画面で [更新プログラムのインポート] を選択します。
インポート プロセスが開始され、画面が [更新プログラム] セクションに切り替わります。 インポートが成功すると、[更新プログラム] タブに表示されます。インポート プロセスの詳細については、Device Update への更新プログラムのインポートに関する記事を参照してください。
デバイス グループを選択する
デバイスに適用したグループ タグを使用して、デバイス グループに更新プログラムをデプロイできます。 [更新プログラム] ページの上部にある [グループとデプロイ] タブを選択して、グループおよびデプロイの一覧と更新プログラムのコンプライアンス グラフを表示します。
更新プログラムのコンプライアンス チャートには、さまざまなコンプライアンス対応状態 (最新の更新状態、利用可能な新しい更新プログラムがある、更新プログラムのインストールが進行中) にあるデバイスの数が表示されます。 詳細については、「デバイス更新のコンプライアンス」を参照してください。
[グループ名] の下に、この IoT ハブに接続されているデバイスのすべてのデバイス グループと利用可能な更新プログラムの一覧が表示され、更新プログラムをデプロイするためのリンクが [状態] の下に表示されます。 グループのデバイス クラスの要件を満たしていないデバイスは、対応する無効なグループに表示されます。 タグとグループの詳細については、デバイス グループの管理に関する記事を参照してください。
このチュートリアルで設定したデバイスを含むデバイス グループと、グループ内のデバイスで使用できる更新プログラムが表示されます。 場合によっては、ページを更新する必要があります。 このビューからグループに最適な利用可能な更新プログラムをデプロイするには、グループの横にある [デプロイ] を選択します。
更新プログラムをデプロイする
[グループの詳細] ページで [現在のデプロイ] タブを選択し、[利用可能な更新プログラム] セクションで目的の更新プログラムの横にある [デプロイ] を選択します。 グループに最適な利用可能な更新プログラムには、[最適] の表示が付いています。
[デプロイの作成] ページで、デプロイを直ちに開始するか今後開始するようにスケジュールし、[作成] を選択します。
ヒント
既定の開始日時は、現在の時刻から 24 時間後です。 デプロイを早く開始したい場合は、異なる日時を選択します。
[グループの詳細] ページの [デプロイの詳細] で、[状態] が [アクティブ] に変わります。 [利用可能な更新プログラム] で、選択した更新プログラムに [(展開中)] のマークが付きます。
[更新プログラム] ページの [グループとデプロイ] タブでコンプライアンス チャートを表示して、更新が進行中であることを確認します。 デバイスが正常に更新されると、コンプライアンス チャートとデプロイの詳細がその状態を反映するように更新されます。
更新プログラムのデプロイ履歴を表示する
[グループの詳細] ページの上部にある [デプロイ履歴] タブを選択し、作成したデプロイの横にある [詳細] リンクを選択します。
[デプロイの詳細] ページで [更新] アイコンを選択して、最新の状態の詳細を表示します。
リソースをクリーンアップする
このチュートリアル用に作成したリソースは、不要になったら削除できます。
- Azure portal で、リソースが含まれるリソース グループに移動します。
- グループのすべてのリソースを削除する場合は、[リソース グループの削除] を選びます。
- リソースの一部のみを削除する場合は、チェック ボックスを使用してリソースを選択してから、[削除] を選択します。