次の方法で共有


IoT Edge モジュールのコンテナー作成オプションを構成する方法

対象:IoT Edge 1.5 チェックマーク IoT Edge 1.5

重要

IoT Edge 1.5 LTS は、サポートされているリリースです。 IoT Edge 1.4 LTS は 2024 年 11 月 12 日に終了しました。 以前のリリースを使用している場合は、「Update IoT Edgeを参照してください。

実行時にモジュール コンテナーを構成するには、配置マニフェストの createOptions パラメーターを使用します。 このパラメーターを使用すると、モジュールのアクセスをホスト デバイスのリソースに制限したり、ネットワークを構成したりできます。

IoT Edgeモジュールは、IoT Edge デバイス上で Docker と互換性のあるコンテナーとして実行されます。 Docker にはコンテナーを作成するための多くのオプションが用意されており、これらのオプションはIoT Edgeモジュールにも適用されます。 詳細については、Docker コンテナーの作成オプションに関するページを参照してください。

作成オプションの書式設定

IoT Edge配置マニフェストは、JSON 形式の作成オプションを受け入れます。 たとえば、すべての edgeHub モジュールに自動的に含まれる作成オプションを見てみましょう。

"createOptions": {
  "HostConfig": {
    "PortBindings": {
      "5671/tcp": [
        {
          "HostPort": "5671"
        }
      ],
      "8883/tcp": [
        {
          "HostPort": "8883"
        }
      ],
      "443/tcp": [
        {
          "HostPort": "443"
        }
      ]
    }
  }
}

この edgeHub の例では、 HostConfig.PortBindings パラメーターを使用して、コンテナー上の公開されているポートをホスト デバイス上のポートにマップします。

Visual StudioまたはVisual Studio Codeに Azure IoT Edge 拡張子を使用する場合は、json 形式の作成オプションを deployment.template.json ファイルに記述します。 次に、拡張機能を使用してIoT Edge ソリューションをビルドしたり、配置マニフェストを生成したりすると、IoT Edge ランタイムが想定する形式で JSON が文字列化されます。 次に例を示します。

"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"

重要

Azure IoT Edge Visual Studio Code拡張機能は、メンテナンスモードです。 iotedgedev ツールは、IoT Edge モジュールを開発するための推奨ツールです。

docker inspect コマンドを使用して、作成オプションを記述します。 開発プロセスの一部として docker run <container name> を使用して、モジュールをローカルで実行します。 モジュールを目的の方法で動作させたら、 docker inspect <container name>実行します。 このコマンドは、モジュールの詳細を JSON 形式で出力します。 構成したパラメーターを見つけて、JSON をコピーします。 次に例を示します。

Docker inspect edgeHub コマンドの結果のスクリーンショット。

一般的なシナリオ

コンテナー作成オプションは、さまざまなシナリオをサポートします。 IoT Edge ソリューションを構築するための最も一般的なものを次に示します。

ホスト ポートをモジュール ポートにマップする

モジュールがIoT Edge ソリューションの外部のサービスと通信する必要があり、それにメッセージ ルーティングを使用していない場合は、ホスト ポートをモジュール ポートにマップします。

ヒント

同じデバイス上のモジュール間通信には、ポート マッピングは必要ありません。 モジュール A がモジュール B でホストされている API に対してクエリを実行する必要がある場合は、ポート マッピングなしで実行できます。 モジュール B は、dockerfile 内のポートを公開する必要があります。 たとえば、 EXPOSE 8080が公開されます。 その後、モジュール A はモジュール B の名前を使用して API にクエリを実行できます。たとえば、 http://ModuleB:8080/api

まず、接続を受け入れるためにモジュール内のポートが公開されていることを確認します。 これを行うには、dockerfile の EXPOSE 命令を使用します。たとえば、 EXPOSE 8080。 プロトコルを指定しない場合、または UDP を指定できる場合、公開命令は既定で TCP プロトコルに設定されます。

次に、PortBindingsHostConfig グループの設定を使用して、モジュール内の公開されているポートをホスト デバイス上のポートにマップします。 たとえば、モジュール内でポート 8080 を公開し、そのポートをホスト デバイスのポート 80 にマップする場合、template.json ファイルの作成オプションは次の例のようになります。

"createOptions": {
  "HostConfig": {
    "PortBindings": {
      "8080/tcp": [
        {
          "HostPort": "80"
        }
      ]
    }
  }
}

配置マニフェストに文字列化すると、構成は次のようになります。

"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"8080/tcp\":[{\"HostPort\":\"80\"}]}}}"

モジュールのメモリと CPU の使用量を制限する

モジュールが使用できるホスト リソースの量を宣言します。 この制御により、1 つのモジュールがメモリや CPU を消費しすぎないようにし、他のプロセスがデバイスで実行されないようにします。 これらの設定は、 グループの HostConfigを使用して管理できます。次に例を示します。

  • Memory: メモリの制限 (バイト単位)。 たとえば、268435456バイト = 256 MB になります。
  • MemorySwap: 合計メモリ制限 (メモリ + スワップ)。 たとえば、536870912 バイト = 512 MB になります。
  • NanoCpus: CPU クォータ (10 ~ 9 (10 億) CPU 単位)。 たとえば、250000000 nanocpus = 0.25 CPU です。

template.json 形式では、これらの値は次の例のようになります。

"createOptions": {
  "HostConfig": {
    "Memory": 268435456,
    "MemorySwap": 536870912,
    "NanoCpus": 250000000
  }
}

最終的な配置マニフェストに文字列化されると、これらの値は次の例のようになります。

"createOptions":"{\"HostConfig\":{\"Memory\":268435456,\"MemorySwap\":536870912,\"NanoCpus\":250000000}}"

IOT EDGE モジュールの GPU 最適化

GPU 最適化仮想マシンで IoT Edge モジュールを実行する場合は、IoT Edge モジュールを有効にして GPU にも接続できます。 既存のモジュールを使用してこの接続を行うには、 createOptionsにいくつかの仕様を追加します。

{"HostConfig": {"DeviceRequests": [{"Count": -1,"Capabilities": [["gpu"]]}]}}

Docker inspect コマンドを使用してこれらの設定を確認し、JSON 出力で新しい設定を表示します。

sudo docker inspect <YOUR-MODULE-NAME>

デバイスと仮想マシンが GPU に接続する方法の詳細については、「 GPU のIoT Edge モジュールの構成、接続、検証を参照してください。

次のステップ

実際の作成オプションのその他の例については、次のIoT Edgeサンプルを参照してください。