対象:
IoT Edge 1.5
重要
IoT Edge 1.5 LTS は、サポートされているリリースです。 IoT Edge 1.4 LTS は 2024 年 11 月 12 日に終了しました。 以前のリリースを使用している場合は、「Update IoT Edgeを参照してください。
この記事では、Visual Studio 2022 を使用して、カスタム Azure IoT Edge モジュールを開発、デバッグ、デプロイする方法について説明します。 Visual Studio 2022 には、C および C# で記述されたIoT Edge モジュール用のテンプレートが用意されています。 サポートされているデバイス アーキテクチャには、Windows x64、Linux x64、ARM32、ARM64 (プレビュー) が含まれます。 サポートされているオペレーティング システム、言語、およびアーキテクチャの詳細については、「Language and architecture support (言語とアーキテクチャのサポート)」を参照してください。
この記事には、次の 2 つのIoT Edge開発ツールの手順が含まれています。
- 開発に推奨されるツールであるコマンド ライン インターフェイス (CLI)
- Azure IoT Edge Visual Studio 拡張機能用のツール (メンテナンス モード)
最初に、ツール セレクター ボタンを使用して、この記事のツール オプションを選択します。 どちらのツールにも、次の利点があります。
- ローカル開発コンピューター上のソリューションとモジュールIoT Edge作成、編集、ビルド、実行、デバッグを行います。
- Visual Studio開発の利点を利用して、C または C# でAzure IoT モジュールをコーディングします。
- Azure IoT Hubを使用して、IoT Edge ソリューションをIoT Edge デバイスにデプロイします。
前提条件
この記事では、Windows実行されているマシンを開発用コンピューターとして使用することを前提としています。
開発用コンピューター Visual Studio 2022 をインストールまたは変更します。
Azure 開発 とC++を使用したデスクトップ開発 のワークロードオプションを選択します。Visual Studio Marketplace から Azure IoT Edge Tools をダウンロードしてインストールします。 IoT Edge ソリューションを作成してビルドするには、Azure IoT Edge Tools 拡張機能を使用します。 推奨される開発ツールは、コマンド ライン (CLI) Azure IoT Edge 開発ツールです。 拡張機能には、Visual Studio プロジェクトの作成に使用するAzure IoT Edge プロジェクト テンプレートが含まれています。 使用する開発ツールに関係なく、拡張機能がインストールされている必要があります。
重要
Azure IoT Edge Tools for VS 2022 拡張機能は、メンテナンス モードです。 推奨される開発ツールは、コマンド ライン (CLI) Azure IoT Edge 開発ツールです。
ヒント
Visual Studio 2019 を使用している場合は、Visual Studio マーケットプレースから Azure IoT Edge Tools for VS 2019 をダウンロードしてインストールします。
Vcpkg ライブラリ マネージャーをインストールします
git clone https://github.com/Microsoft/vcpkg cd vcpkg bootstrap-vcpkg.batazure-iot-sdk-c パッケージをインストールWindows
vcpkg.exe install azure-iot-sdk-c:x64-windows vcpkg.exe --triplet x64-windows integrate installモジュール イメージをビルドして実行するために、Docker 互換のコンテナー管理システムをダウンロードし、開発用コンピューターにインストールします。 例として、Docker Community Edition をインストールします。
Linux コンテナー を使用してモジュールを開発するには、Docker Desktop 用の requirements を満たすWindows コンピューターを使用します。
モジュール イメージを格納する Azure Container Registry または Docker Hub を作成します。
ヒント
クラウド レジストリの代わりに、ローカル Docker レジストリを使用してプロトタイプ作成とテストを行います。
Azure CLIをインストールします。
デバイスでモジュールをテストするには、少なくとも 1 つのIoT Edge デバイスを含むアクティブなIoT Hubが必要です。 テスト用のIoT Edge デバイスを作成するには、Azure ポータルまたは CLI でデバイスを作成します。
Azureポータルでを作成するのが最も簡単な方法です。 Azure ポータルで、IoT Hub リソースに移動します。 [デバイス管理] メニューの [デバイス] を選択し、[デバイスの追加] を選択します。
デバイスの作成で、Device ID を使用してデバイスに名前を付け、IoT Edge Device をオンにしてから、左下にある Save を選択します。
Device management > Devices メニューから、新しいデバイスがIoT Hubに存在することを確認します。 Azure ポータルを使用したIoT Edge デバイスの作成の詳細については、「対称キーを使用して Linux でIoT Edge デバイスを作成してプロビジョニングする」を参照>。
CLI を使用してIoT Edge デバイスを作成するには、Linux または Windows のクイックスタートの手順に従います。 IoT Edge デバイスを登録するプロセスでは、IoT Edge デバイスを作成します。
開発用コンピューターで IoT Edge デーモンを実行している場合は、Visual Studioで開発を開始する前に EdgeHub と EdgeAgent を停止することが必要になる場合があります。
Azure IoT Edge プロジェクトを作成する
Visual StudioのIoT Edge プロジェクト テンプレートは、IoT Edge デバイスに展開するソリューションを作成します。 まず、Azure IoT Edge ソリューションを作成します。 その後、そのソリューションにモジュールを作成します。 各IoT Edge ソリューションには、複数のモジュールを含めることができます。
警告
Visual Studio拡張機能用のAzure IoT Edge ツールには、C および C# モジュールのプロジェクト テンプレートがありません。 拡張機能を使用してIoT Edgeモジュールを作成できない場合は、次の回避策を使用します。
次のファイルをダウンロードし、一覧に示されているVisual Studioテンプレート ディレクトリに配置します。
| テンプレート ファイル | ディレクトリに追加する |
|---|---|
| azureiotedgemodule-v0.0.4.zip | %userprofile%\Documents\Visual Studio 2022\Templates\ProjectTemplates\Visual C# |
| azureiotedgevcmodulevs17-v0.0.9.zip | %userprofile%\Documents\Visual Studio 2022\Templates\ProjectTemplates\Visual C++ Project |
ソリューション内に 3 つのプロジェクトを構築してゆきます。 温度センサー モジュールに加えて EdgeAgent と EdgeHub を含むメイン モジュール。 次に、さらに 2 つのIoT Edge モジュールを追加します。
重要
Visual Studio作成されるIoT Edge プロジェクト構造は、Visual Studio Codeのプロジェクト構造と同じではありません。
現在、Azure IoT Edge開発ツール CLI では、Visual Studio プロジェクトの種類の作成はサポートされていません。 Visual Studio IoT Edge拡張機能を使用して、Visual Studio プロジェクトを作成します。
Visual Studioで、新しいプロジェクトを作成します。
新しいプロジェクトを作成で、Azure IoT Edge を検索します。 IoT Edge デバイスのプラットフォームとアーキテクチャに一致するプロジェクトを選択し、Next を選択します。
[ 新しいプロジェクトの構成] で、プロジェクトの名前を入力し、場所を指定して、[ 作成] を選択します。
[モジュールの追加] で、開発するモジュールの種類を選択します。 デプロイに追加する既存のモジュールがある場合は、[既存のモジュール] を選択します。
[モジュール名] に、モジュールの名前を入力します。 コンテナー レジストリ内に一意の名前を選択します。
[リポジトリ URL] で、モジュールのイメージ リポジトリの名前を指定します。 Visual Studioはlocalhost:5000/<あなたのモジュール名>でモジュール名を自動入力します。 独自のレジストリ情報に置き換えます。 テスト用に Docker のローカル レジストリを使用する場合、localhost を使用します。 Azure Container Registryを使用する場合は、レジストリの設定からログイン サーバーを使用します。 ログイン サーバーは レジストリ名.azurecr.io のようになります。 この文字列の localhost:5000 部分だけを置き換えて、最終的な結果が レジストリ名.azurecr.io/対象のモジュール名 になるようにします。
[追加] を選択して、お使いのモジュールをプロジェクトに追加します。
アプリケーションとモジュールを追加する方法のスクリーンショット。
注
既存のIoT Edge プロジェクトのリポジトリ URL を変更するには、module.json ファイルを開きます。 リポジトリ URL は、JSON ファイルの リポジトリ プロパティにあります。
これで、Visual Studio ソリューションにIoT Edge プロジェクトとIoT Edge モジュールが作成されました。
プロジェクト構造
ソリューションには、メイン プロジェクト フォルダーと 1 つのモジュール フォルダーという 2 つのプロジェクト レベルのフォルダーがあります。 たとえば、 AzureIotEdgeApp1 という名前のメイン プロジェクト フォルダーと IotEdgeModule1 という名前のモジュール フォルダーがあるとします。 メイン プロジェクト フォルダーには配置マニフェストがあります。
モジュール プロジェクト フォルダーには、選択した言語に応じて、 または という名前のモジュール コードのファイルがあります。 このフォルダーには、モジュールのメタデータを記述する という名前のファイルもあります。 ここで異なる Docker ファイルは、モジュールをWindowsまたは Linux コンテナーとしてビルドするために必要な情報を提供します。
プロジェクトの配置マニフェスト
という名前の配置マニフェストを編集します。 このファイルは、デバイス上で実行されるすべてのモジュールと、それらが相互に通信する方法を定義する、IoT Edge配置マニフェストのテンプレートです。 デプロイ マニフェストの詳細については、モジュールをデプロイしてルートを確立する方法に関するページを参照してください。
このデプロイ テンプレートを開くと、このVisual Studio プロジェクトで作成したカスタム モジュールと共に、edgeAgent と edgeHub の 2 つのランタイム モジュールが含まれていることがわかります。 SimulatedTemperatureSensor という名前の 4 番目のモジュールも含まれています。 この既定のモジュールでは、モジュールのテストに使用できるシミュレートされたデータが生成されます。不要な場合は削除します。 シミュレートされた温度センサーのしくみについては、SimulatedTemperatureSensor.csproj ソース コードを参照してください。
IoT Edge ランタイムバージョンを設定する
最新の安定したランタイム バージョンは 1.5 です。 IoT Edge ランタイム バージョンを、デバイスのターゲットにする最新の安定したリリースまたはバージョンに更新します。
Solution Explorerで、メイン プロジェクトの名前を右クリックし、 ランタイム バージョン IoT Edgeを設定します。
'Set IoT Edge Runtime version' という名前のメニュー項目を検索して選択する方法のスクリーンショット ドロップダウン メニューを使用して、IoT Edge デバイスが実行されているランタイム バージョンを選択し、OK を選択して変更を保存します。 変更が行われなかった場合は、[キャンセル] を選択して終了します。
拡張機能には、最新のランタイム バージョンの選択は含まれません。 ランタイム バージョンを 1.2 より高く設定するには、deployment.debug.template.json配置マニフェスト ファイル を 開きます。 システム ランタイム モジュール イメージ edgeAgent および edgeHub のランタイム バージョンを変更します。 たとえば、ランタイム バージョン 1.5 IoT Edge使用するには、配置マニフェスト ファイルで次の行を変更します。
"systemModules": { "edgeAgent": { //... "image": "mcr.microsoft.com/azureiotedge-agent:1.5" //... "edgeHub": { //... "image": "mcr.microsoft.com/azureiotedge-hub:1.5", //...バージョンを変更した場合は、プロジェクトの名前を右クリックして配置マニフェストを再生成し、Generate deployment for IoT Edge を選択します。 これにより、配置テンプレートに基づいて配置マニフェストが生成され、Visual Studio プロジェクトの config フォルダーに配置されます。
deployment.debug.template.json 配置マニフェスト ファイルを開きます。 deployment マニフェストは、ターゲット IoT Edge デバイスで構成するモジュールについて説明する JSON ドキュメントです。
システム ランタイム モジュール イメージ edgeAgent および edgeHub のランタイム バージョンを変更します。 たとえば、ランタイム バージョン 1.5 IoT Edge使用するには、配置マニフェスト ファイルで次の行を変更します。
"systemModules": { "edgeAgent": { //... "image": "mcr.microsoft.com/azureiotedge-agent:1.5", //... "edgeHub": { //... "image": "mcr.microsoft.com/azureiotedge-hub:1.5", //...
モジュール インフラストラクチャと開発オプション
新しいモジュールを追加すると、コードに触れることなくテストを開始できるよう、ビルドしてデバイスにデプロイする準備ができている既定のコードが付属します。 モジュール コードは、モジュール フォルダー内の (C# の場合) または (C の場合) という名前のファイルにあります。
既定のソリューションは、SimulatedTemperatureSensor モジュールからのシミュレートされたデータがモジュールにルーティングされるように構築され、入力を受け取ってIoT Hubに送信します。
独自のコードでモジュール テンプレートをカスタマイズする準備ができたら、Azure IoT Hub SDK を使用して、セキュリティ、デバイス管理、信頼性などの IoT ソリューションの主なニーズに対応するモジュールを構築します。
シミュレーターを使用したデバッグ
Azure IoT EdgeHub Dev Tool は、ローカル開発とデバッグエクスペリエンスを提供します。 このツールは、IoT Edge ランタイムなしでモジュールIoT Edge開始するのに役立ちます。これにより、IoT Edgeモジュールとソリューションをローカルで作成、開発、テスト、実行、デバッグできます。 テストするために、イメージをコンテナー レジストリにプッシュしたり、それらをデバイスに配置したりする必要はありません。
詳細については、「Azure IoT EdgeHub Dev Tool を参照してください。
Visual Studioでツールを初期化するには:
Azure ポータルまたはAzure CLIから、IoT HubにあるIoT Edgeデバイスの接続文字列を取得します。
CLI を使用してconnection stringを取得する場合は、次のコマンドを使用します。"[device_id]" と "[hub_name]" を実際の値に置き換えます。
az iot hub device-identity connection-string show --device-id [device_id] --hub-name [hub_name]Visual Studioの Tools メニューから、Azure IoT Edge Tools>Setup IoT Edge Simulator を選択します。
connection stringを貼り付け、OK を選択>。
注
後続のすべてのAzure IoT Edge ソリューションに結果が自動的に適用されるため、開発用コンピューターで次の手順を 1 回だけ実行する必要があります。 別のconnection stringに変更する必要がある場合は、この手順をもう一度実行できます。
1 つのモジュールをビルドしてデバッグする
通常は、複数のモジュールを含むソリューション全体内で実行する前に、各モジュールをテストしてデバッグする必要があります。 IoT Edge シミュレーター ツールを使用すると、ポート 53000 経由の送信メッセージを分離して 1 つのモジュールを実行できます。
Solution Explorer で、モジュール プロジェクト フォルダー (たとえば、IotEdgeModule1) を選択して強調表示します。 カスタム モジュールをスタートアップ プロジェクトとして設定します。 メニューから [プロジェクト スタートアップ プロジェクトとして設定] を選択します。
F5 を押すか、実行ツール バー ボタンを選択して、1 つのモジュールのIoT Edge シミュレーターを起動します。 最初は 10 秒から 20 秒かかる場合があります。
モジュールの実行方法を示すスクリーンショット。
モジュールが正常に初期化されると、.NET Core コンソール アプリ ウィンドウが表示されます。
モジュールを検査するためのブレークポイントを設定します。
- C# で開発する場合は 内の 関数にブレークポイントを設定します。
- C を使用する場合は main.c 内の 関数にブレークポイントを設定します。
メッセージを送信してモジュールをテストします。 単一のモジュールをデバッグする場合、シミュレーターは既定のポート53000でメッセージをリッスンします。 モジュールにメッセージを送信するには、 Git Bash や WSL Bash などのコマンド シェルから次の curl コマンドを実行します。
curl --header "Content-Type: application/json" --request POST --data '{"inputName": "input1","data":"hello world"}' http://localhost:53000/api/v1/messagesURL で右中かっこ/右角かっこが一致しないエラーが発生した場合、代わりに次のコマンドを試してください。
curl --header "Content-Type: application/json" --request POST --data "{\"inputName\": \"input1\", \"data\", \"hello world\"}" http://localhost:53000/api/v1/messagesブレークポイントがトリガーされるはずです。 デバッガーの実行中に見つかった Visual Studio Locals ウィンドウで変数を監視できます。 Debug>Windows>Locals に移動します。
Bash またはシェルに、 という確認が表示されるはずです。
.NET コンソールに次の情報が表示されます。
IoT Hub module client initialized. Received message: 1, Body: [hello world]Ctrl + F5 キーを押すか停止ボタンをクリックして、デバッグを停止します。
複数のモジュールのビルドとデバッグ
1 つのモジュールの開発が完了したら、複数のモジュールを含むソリューション全体を実行してデバッグします。 IoT Edge シミュレーター ツールを使用すると、メッセージ ルーティング用のシミュレートされた edgeHub を含め、配置マニフェストで定義されているすべてのモジュールを実行できます。 この例では、2 つのカスタム モジュールとシミュレートされた温度センサー モジュールを実行します。 シミュレートされた温度センサー モジュールからのメッセージは、各カスタム モジュールにルーティングされます。
Solution Explorer で、メイン プロジェクト フォルダーを右クリックして、ソリューションに 2 つ目のモジュールを追加します。 メニューで Add>New IoT Edge Module を選択します。
Add moduleウィンドウで、新しいモジュールに名前を付け、リポジトリ URL のlocalhost:5000部分を、前と同様にAzure Container Registryログイン サーバーに置き換えます。ファイルを開き、新しいモジュールが modules セクションに追加されていることを確認します。 新しいモジュールからIoT Hubにメッセージを送信するために、 の
EdgeHubセクションにも新しいルートが追加されました。 シミュレートされた温度センサーから新しいモジュールにデータを送信するには、 の次のような行によって別のルートを追加します。 (2 か所) を独自のモジュール名に置き換えます。"sensorTo<NewModuleName>": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/<NewModuleName>/inputs/input1\")"メイン プロジェクト (AzureIotEdgeApp1 など) を右クリックし、[スタートアップ プロジェクトとして設定] を選択します。 メイン プロジェクトをスタートアップ プロジェクトとして設定すると、ソリューション内のすべてのモジュールが実行されます。 これには、ソリューションに追加した両方のモジュール、シミュレートされた温度センサー モジュール、シミュレートされた Edge ハブが含まれます。
[F5] キーを押すか、実行ツールバー ボタンを選択してソリューションを実行します。 最初は 10 秒から 20 秒かかる場合があります。 このプロジェクトに必要なポートをバインドする可能性のある他の Docker コンテナーが実行中でないことを確認してください。
2 つの .NET Core コンソール アプリ ウィンドウがモジュールごとに 1 つ表示されます。
モジュールを検査するためのブレークポイントを設定します。
- C# で開発する場合は 内の 関数にブレークポイントを設定します。
- C を使用する場合は main.c 内の 関数にブレークポイントを設定します。
各モジュール内にブレークポイントを作成したら、F5 キーを押して複数のモジュールを同時に実行し、デバッグします。 複数の .NET Core コンソール アプリ ウィンドウが表示され、各ウィンドウは異なるモジュールを表します。
Ctrl + F5 キーを押すか停止ボタンをクリックして、デバッグを停止します。
イメージをビルドしてレジストリにプッシュする
モジュールを開発してデバッグしたら、モジュール イメージをビルドしてAzure Container Registryにプッシュします。 次に、モジュールを IoT Edge デバイスにデプロイします。
メイン IoT Edge プロジェクトを、個々のモジュールの 1 つではなく、スタートアップ プロジェクトとして設定します。
モジュール イメージに対して作成する構成として [デバッグ] または [リリース] を選択します。
注
Debug を選択すると、Visual Studioは
Dockerfile.(amd64|windows-amd64).debugを使用して Docker イメージをビルドします。 これには、コンテナー イメージ内の .NET Core コマンド ライン デバッガー VSDBG が含まれます。 運用対応のIoT Edge モジュールの場合は、VSDBG なしで を使用するDockerfile.(amd64|windows-amd64)構成を使用します。Azure Container Registry (ACR) などのプライベート レジストリを使用する場合は、次の Docker コマンドを使用してサインインします。 Azure ポータルのレジストリの Access キー ページからユーザー名とパスワードを取得します。
docker login <ACR login server>Azure Container Registry ログイン情報を、
deployment.debug.template.jsonファイルのランタイム設定に追加します。 レジストリ資格情報は、 ファイル (最も安全) に追加することも、 ファイルに直接追加することもできます。資格情報を ファイルに追加する:
Solution Explorer で、ツール バー ボタン Show All Files を選択します。 ファイルが表示されます。 Azure Container Registryユーザー名とパスワードを
.envファイルに追加します。 これらの資格情報は、Azure ポータルのAzure Container Registryの Access Keys ページで見つけます。
DEFAULT_RT_IMAGE=1.5 CONTAINER_REGISTRY_USERNAME_myregistry=<my-registry-name> CONTAINER_REGISTRY_PASSWORD_myregistry=<my-registry-password>資格情報を deployment.debug.template.json に直接追加する
資格情報をデプロイ テンプレートに直接追加する場合は、プレースホルダーを ACR 管理者のユーザー名、パスワード、レジストリ名に置き換えます。
"settings": { "minDockerVersion": "v1.25", "loggingOptions": "", "registryCredentials": { "registry1": { "username": "<username>", "password": "<password>", "address": "<registry name>.azurecr.io" } } }注
この記事では、Azure Container Registryの管理者ログイン資格情報を使用します。これは、開発とテストのシナリオに便利です。 運用環境のシナリオに向けて準備ができたら、サービス プリンシパルのような最小限の特権で認証できるオプションを使用することをお勧めします。 詳細については、[コンテナー レジストリへのアクセスを管理する] を参照してください。
ローカル レジストリを使用する場合は、 ローカル レジストリを実行します。
最後に、Solution Explorer でメイン プロジェクト フォルダーを右クリックし、Build と Push IoT Edge Modules を選択して、各モジュールの Docker イメージをビルドしてプッシュします。 これには数分かかる場合があります。 Visual Studioの出力コンソールに
Finished Build and Push IoT Edge Modules.が表示されたら、完了です。
ソリューションのデプロイ
モジュール イメージをビルドしてAzure Container Registryにプッシュしたので、ソリューションを IoT Edge デバイスにデプロイします。 このチュートリアルには、配置マニフェスト テンプレートが既にあります。 そこから配置マニフェストを生成し、Azure CLI コマンドを使用して、AzureのIoT Edge デバイスにモジュールをデプロイします。
Visual Studio Solution Explorerでメインプロジェクトを右クリックし、IoT Edge のデプロイを生成を選択します。
'配置の生成' メニュー項目の場所を示すスクリーンショット。
ローカル Visual Studioメイン プロジェクト フォルダーに移動し、
configフォルダーを確認します。 ファイル パスは のようになるでしょう。 ここで、生成された配置マニフェスト ( など) を見つけます。ファイルを開き、スキーマのバージョンが 1.2 に設定されていることを確認します。
"$edgeHub": { "properties.desired": { "schemaVersion": "1.2", "routes": { "IotEdgeModule2022ToIoTHub": "FROM /messages/modules/IotEdgeModule2022/outputs/* INTO $upstream", "sensorToIotEdgeModule2022": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/IotEdgeModule2022/inputs/input1\")", "IotEdgeModule2022bToIoTHub": "FROM /messages/modules/IotEdgeModule2022b/outputs/* INTO $upstream" }, "storeAndForwardConfiguration": { "timeToLiveSecs": 7200 } } }ヒント
Visual Studio 2022 のデプロイ テンプレートには、1.2 スキーマ バージョンが必要です。 1.1 または 1.0 にする必要がある場合は、デプロイが生成されるまで待機します ( で変更しないでください)。 デプロイを生成すると、既定で 1.2 スキーマが作成されます。 ただし、必要に応じて、生成されたマニフェスト
deployment.amd64.debug.jsonを手動で変更してから、Azureに配置することができます。重要
IoT Edge デバイスがデプロイされると、現在、スキーマ バージョン 1.2 (バージョン 1.1 は問題ありません) のAzure ポータルに正しく表示されません。ただし、これはまだIoT Hubで接続されており、Azure CLIを使用していつでも通信できるため、デバイスには影響しません。
次に、Azure CLI コマンドを使用してマニフェストをデプロイしましょう。 Visual Studio Developer コマンド プロンプトを開き、config ディレクトリに変更します。
cd configIoT Edge デバイスのマニフェストを IoT Hub にデプロイします。 このコマンドによって、ソリューションで開発されたモジュールを使用するようにデバイスが構成されます。 配置マニフェストは、前の手順で作成し、config フォルダーに保存しました。 config フォルダーから次の配置コマンドを実行します。 、、 は、実際の値に置き換えます。 IoT HubにIoT Edgeデバイス ID が存在しない場合は、作成する必要があります。
az iot edge set-modules --device-id [device id] --hub-name [hub name] --content [file path]たとえば、コマンドは次のようになります。
az iot edge set-modules --device-id my-device-name --hub-name my-iot-hub-name --content deployment.amd64.debug.jsonコマンドを実行すると、コマンド プロンプトに JSON で出力されたデプロイの確認が表示されます。
モジュールの Docker イメージをビルドする
モジュールを開発したら、IoT Edge デバイスにデプロイするためにコンテナー レジストリに格納するモジュール イメージをビルドします。
モジュールの Dockerfile を使用して、モジュールの Docker イメージをビルドします。
docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>"
たとえば、コマンド シェルがプロジェクト ディレクトリにあり、モジュール名が IotEdgeModule1 の場合は、次のコマンドを使用して、ローカル レジストリまたは Azure コンテナー レジストリのイメージをビルドします。
# Build the image for the local registry
docker build --rm -f "./IotEdgeModule1/Dockerfile.amd64.debug" -t localhost:5000/iotedgemodule1:0.0.1-amd64 "./IotEdgeModule1"
# Or build the image for an Azure Container Registry
docker build --rm -f "./IotEdgeModule1/Dockerfile.amd64.debug" -t myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 "./IotEdgeModule1"
モジュールの Docker イメージをプッシュする
モジュール イメージをローカル レジストリまたはコンテナー レジストリにプッシュします。
docker push <ImageName>
次に例を示します。
# Push the Docker image to the local registry
docker push localhost:5000/iotedgemodule1:0.0.1-amd64
# Or push the Docker image to an Azure Container Registry
az acr login --name myacr
docker push myacr.azurecr.io/iotedgemodule1:0.0.1-amd64
IoT Edge デバイスにモジュールをデプロイします。
Visual Studioで、メイン プロジェクトで deployment.debug.template.json 配置マニフェスト ファイルを開きます。
deployment マニフェストは、ターゲット IoT Edge デバイスで構成するモジュールについて説明する JSON ドキュメントです。 デプロイする前に、Azure Container Registry資格情報、モジュール イメージ、および適切な createOptions 値を更新する必要があります。 createOption 値の詳細については、「IoT Edge モジュールのコンテナー作成オプションを構成する方法を参照してください。
Azure Container Registryを使用してモジュール イメージを格納する場合は、
edgeAgent 設定の deployment.debug.template.json に資格情報を追加する必要があります。 たとえば、"modulesContent": { "$edgeAgent": { "properties.desired": { "schemaVersion": "1.1", "runtime": { "type": "docker", "settings": { "minDockerVersion": "v1.25", "loggingOptions": "", "registryCredentials": { "myacr": { "username": "myacr", "password": "<your_acr_password>", "address": "myacr.azurecr.io" } } } }, //...画像 のプロパティの値を、レジストリにプッシュしたモジュール イメージ名に置き換えます。 たとえば、カスタム モジュール IotEdgeModule1 用にタグ付けされたイメージ をプッシュした場合は、イメージ プロパティの値を タグ値に置き換えます。
createOptions 値を、"展開テンプレートのシステムおよびカスタム モジュールごとに" 文字列化されたコンテンツに追加または置き換えます。
たとえば、IotEdgeModule1 の イメージ と createOptions の設定は次のようになります。
"IotEdgeModule1": { "version": "1.0.0", "type": "docker", "status": "running", "restartPolicy": "always", "settings": { "image": "myacr.azurecr.io/iotedgemodule1:0.0.1-amd64", "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}" }
IoT Edge Azure CLI set-modules コマンドを使用して、モジュールをAzure IoT Hubにデプロイします。 たとえば、deployment.debug.amd64.json ファイルで定義されているモジュールを IoT Hub my-iot-hub IoT Edge デバイス my-device にデプロイするには、次のコマンドを実行します。
az iot edge set-modules --hub-name my-iot-hub --device-id my-device --content ./deployment.debug.template.json --login "HostName=my-iot-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=<SharedAccessKey>"
ヒント
Azure ポータルの Azure IoT Hub で IoT Hub の接続文字列を見つけます。>セキュリティ設定>共有アクセス ポリシーの下にあります。
デバイスへの配置を確認する
IoT Edge モジュールがAzureにデプロイされたことを確認するには、SSH やAzure Bastionなどを使用してデバイス (または仮想マシン) にサインインし、IoT Edge リスト コマンドを実行します。
iotedge list
デバイスまたは仮想マシンで実行されているモジュールの一覧が表示されるはずです。
NAME STATUS DESCRIPTION CONFIG
SimulatedTemperatureSensor running Up a minute mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0
edgeAgent running Up a minute mcr.microsoft.com/azureiotedge-agent:1.5
edgeHub running Up a minute mcr.microsoft.com/azureiotedge-hub:1.5
IotEdgeModule1 running Up a minute myacr.azurecr.io/iotedgemodule1:0.0.1-amd64.debug
myIotEdgeModule2 running Up a minute myacr.azurecr.io/myiotedgemodule2:0.0.1-amd64.debug
Docker リモート SSH を使用してデバッグする
Docker エンジンと Moby エンジンはコンテナーへの SSH 接続をサポートしているため、Visual Studioを使用してリモート デバイス上のコードをアタッチおよびデバッグできます。
Docker にリモート接続するには、root レベルの特権が必要です。 非 root ユーザーとしての Docker の管理に関するページの手順に従って、リモート デバイスでの Docker デーモンへの接続を許可します。 デバッグが完了したら、Docker グループからユーザーを削除できます。
Visual Studioを使用して、リモート デバイス上の Docker コンテナーで実行されているプロセスに
Attach を実行する手順に従います。 Visual Studioで、カスタム モジュールにブレークポイントを設定します。
ブレークポイントにヒットすると、変数の検査、コードのステップ実行、モジュールのデバッグを行うことができます。
次のステップ
IoT Edge デバイス用のカスタム モジュールを開発するには、Azure IoT Hub SDKを理解して使用します。
特定のIoT Edge デバイスの device-to-cloud (D2C) メッセージを監視するには、Tutorial: monitor IoT Edge devices を確認して開始します。