適用対象: IoT Edge 1.1
重要
IoT Edge 1.1 サポート終了日は 2022 年 12 月 13 日でした。 本製品、サービス、テクノロジ、または API のサポート内容については、Microsoft 製品のライフサイクルに関するページをご確認ください。 最新バージョンの IoT Edge への更新の詳細については、「IoT Edgeの更新」を参照してください。
IoT Edge デバイスでは、HTTPS 要求を送信して IoT Hub と通信します。 デバイスがプロキシ サーバーを使用するネットワークに接続されている場合は、サーバー経由で通信するように IoT Edge ランタイムを構成する必要があります。 プロキシ サーバーは、IoT Edge ハブ経由でルーティングされない HTTP または HTTPS 要求を行う場合にも、個々の IoT Edge モジュールに影響を与える可能性があります。
この記事では、プロキシ サーバーの内側で IoT Edge デバイスを構成して管理する以下の 4 つの手順について説明します。
-
IoT Edge のインストール スクリプトによってインターネットからパッケージとファイルが取得されるので、デバイスではこれらの要求を行うためにプロキシ サーバーを介して通信する必要があります。 Windows デバイスの場合、インストール スクリプトにはオフライン インストール オプションもあります。
この手順は、最初に設定するときに IoT Edge デバイスを構成するための 1 回限りのプロセスです。 IoT Edge ランタイムを更新する場合も、同じ接続が必要です。
デバイスで IoT Edge とコンテナー ランタイムを構成する
IoT Edge は、IoT Hub との通信を担当します。 コンテナー ランタイムはコンテナー管理を担当しているため、コンテナー レジストリと通信します。 これらのコンポーネントはいずれも、プロキシ サーバー経由で Web 要求を行う必要があります。
この手順は、最初に設定するときに IoT Edge デバイスを構成するための 1 回限りのプロセスです。
デバイス上の構成ファイルで IoT Edge エージェントのプロパティを構成する
IoT Edge デーモンでは、最初に edgeAgent モジュールの起動が行われます。 次に、edgeAgent モジュールによって IoT Hub から配置マニフェストが取得され、他のすべてのモジュールの起動が行われます。 IoT Edge エージェントが IoT Hub への最初の接続を確立するには、デバイス自体で edgeAgent モジュール環境変数を手動で構成します。 最初の接続後は、edgeAgent モジュールをリモートで構成できます。
この手順は、最初に設定するときに IoT Edge デバイスを構成するための 1 回限りのプロセスです。
今後のすべてのモジュールのデプロイのために、プロキシ経由で通信するすべてのモジュールの環境変数を設定する
IoT Edge デバイスが設定され、プロキシ サーバー経由で IoT Hub に接続されたら、今後のすべてのモジュール デプロイで接続を維持する必要があります。
この手順は、リモートで実行される継続的なプロセスです。これにより、すべての新しいモジュールで、またはデプロイの更新ごとに、プロキシ サーバー経由で通信するデバイスの機能が維持されます。
プロキシの URL を確認する
この記事の手順を始める前に、プロキシ URL について理解しておく必要があります。
プロキシ URL の形式は、protocol://proxy_host:proxy_port です。
protocol は HTTP または HTTPS のいずれかです。 Docker デーモンはコンテナー レジストリの設定に応じてどちらのプロトコルも使用できますが、IoT Edge デーモンとランタイム コンテナーは常に HTTP を使用してプロキシに接続する必要があります。
proxy_host は、プロキシ サーバーのアドレスです。 プロキシ サーバーで認証が必要な場合は、プロキシ ホストの一部として、user:password@proxy_host の形式で資格情報を指定できます。
proxy_port は、ネットワーク トラフィックにプロキシが応答するネットワーク ポートです。
プロキシ経由で IoT Edge をインストールする
IoT Edge デバイスが Windows または Linux のどちらで動作している場合でも、プロキシ サーバー経由でインストール パッケージにアクセスする必要があります。 オペレーティング システムに応じて、プロキシ サーバー経由で IoT Edge ランタイムをインストールする手順を実行します。
Linux デバイス
Linux デバイス上に IoT Edge ランタイムをインストールしている場合、プロキシ サーバーを経由してインストール パッケージにアクセスするように、パッケージ マネージャーを構成します。 たとえば、http-proxy を使用するように apt-get を設定します。 パッケージ マネージャーを構成したら、「Azure IoT Edge ランタイム を通常どおりにインストールする」の手順に従います。
IoT Edge for Linux on Windows を使用する Windows デバイス
IoT Edge for Linux on Windows を使用して IoT Edge ランタイムをインストールする場合は、Linux 仮想マシンに IoT Edge が既定でインストールされます。 追加のインストールまたは更新手順は必要ありません。
Windows コンテナーを使用する Windows デバイス
Windows デバイス上に IoT Edge ランタイムをインストールしている場合、プロキシ サーバーを 2 回通過する必要があります。 最初の接続では、インストーラー スクリプト ファイルをダウンロードするためのもので、2 回目の接続はインストール中に必要なコンポーネントをダウンロードします。 Windows 設定でプロキシ情報を構成するか、または PowerShell コマンドにプロキシ情報を直接含めることができます。
以下の手順は、-proxy
引数を使用した Windows インストールの例です。
Invoke-WebRequest コマンドは、インストーラー スクリプトにアクセスするためにプロキシ情報が必要です。 次に、Deploy-IoTEdge コマンドで、インストール ファイルをダウンロードするためにプロキシ情報が必要になります。
. {Invoke-WebRequest -proxy <proxy URL> -useb aka.ms/iotedge-win} | Invoke-Expression; Deploy-IoTEdge -proxy <proxy URL>
Initialize IoTEdge コマンドはプロキシ サーバーを経由する必要がないため、2 番目の手順では、Invoke-WebRequest のプロキシ情報のみが必要になります。
. {Invoke-WebRequest -proxy <proxy URL> -useb aka.ms/iotedge-win} | Invoke-Expression; Initialize-IoTEdge
URL に含めることができないプロキシ サーバーの複雑な資格情報がある場合は、-InvokeWebRequestParameters
内で -ProxyCredential
パラメーターを使用します。 たとえば、
$proxyCredential = (Get-Credential).GetNetworkCredential()
. {Invoke-WebRequest -proxy <proxy URL> -ProxyCredential $proxyCredential -useb aka.ms/iotedge-win} | Invoke-Expression; `
Deploy-IoTEdge -InvokeWebRequestParameters @{ '-Proxy' = '<proxy URL>'; '-ProxyCredential' = $proxyCredential }
プロキシのパラメーターについて詳しくは、「Invoke-WebRequest」を参照してください。 Windows インストール パラメーターの詳細については、Windows 上の IoT Edge 用の PowerShell スクリプトのを参照してください。
IoT Edge と Moby を構成する
IoT Edge は、IoT Edge デバイス上で実行されている 2 つのデーモンに依存しています。 Moby デーモンは、コンテナー レジストリからコンテナー イメージをプルするための Web 要求を行います。 IoT Edge デーモンは、IoT Hub と通信するための Web 要求を行います。
Moby デーモンと IoT Edge デーモンの両方を、継続的なデバイス機能にプロキシ サーバーを使用するように構成する必要があります。 この手順は、デバイスの初期設定中に IoT Edge デバイス上で行われます。
Moby デーモン
Moby は Docker 上に構築されるため、環境変数を使用して Moby デーモンを構成するには、Docker のドキュメントを参照してください。 ほとんどのコンテナー レジストリ (DockerHub および Azure Container Registry を含む) では HTTPS 要求をサポートしているので、設定する必要があるパラメーターは HTTPS_PROXY です。 トランスポート層セキュリティ (TLS) をサポートしていないレジストリからイメージをプルしている場合は、HTTP_PROXY パラメーターを設定する必要があります。
お使いの IoT Edge デバイス オペレーティング システムに該当する記事を選択します。
- Linux で Docker デーモンを構成する Linux デバイス上の Moby デーモンは Docker の名前を保持します。
- Windows で Docker デーモンを構成する Windows デバイス上の Moby デーモンは iotedge-moby と呼ばれます。 名前が異なるのは、Docker Desktop と Moby の両方が 1 台の Windows デバイスで並列実行される可能性があるためです。
IoT Edge デーモン
IoT Edge デーモンは、Moby デーモンと同様の方法で構成されます。 お使いのオペレーティング システムに基づいて、次の手順に従って、サービス用に環境変数を設定します。
IoT Edge デーモンは、常に HTTPS を使用して IoT Hub に要求を送信します。
Linux
IoT Edge デーモンを構成するために、ターミナルでエディターを開きます。
sudo systemctl edit iotedge
次のテキストを入力して、<proxy URL> をお使いのプロキシ サーバーのアドレスとポートに置き換えます。 その後、保存して終了します。
[Service]
Environment=https_proxy=<proxy URL>
サービス マネージャーを更新して、IoT Edge の新しい構成を選択します。
sudo systemctl daemon-reload
IoT Edge を再起動して、変更を有効にします。
sudo systemctl restart iotedge
環境変数が作成され、新しい構成が読み込まれたことを確認します。
systemctl show --property=Environment iotedge
Windows での Linux 用 IoT Edge の使用
Windows 仮想マシン上の IoT Edge for Linux にログインします。
Connect-EflowVm
上記の Linux セクションと同じ手順に従って、IoT Edge デーモンを構成します。
Windows は Windows コンテナーを使用します
管理者として PowerShell ウィンドウを開き、次のコマンドを実行して、新しい環境変数でレジストリを編集します。 <proxy url> をお使いのプロキシ サーバーのアドレスとポートに置き換えます。
reg add HKLM\SYSTEM\CurrentControlSet\Services\iotedge /v Environment /t REG_MULTI_SZ /d https_proxy=<proxy URL>
IoT Edge を再起動して、変更を有効にします。
Restart-Service iotedge
IoT Edge エージェントを構成する
IoT Edge エージェントは、すべての IoT Edge デバイス上で最初に起動するモジュールです。 これは、IoT Edge 構成ファイル内の情報に基づいて初めて開始されます。 その後、IoT Edge エージェントは IoT Hub に接続して配置マニフェストを取得します。このマニフェストでは、デバイスにデプロイする他のモジュールを宣言します。
この手順は、デバイスの初期設定中に IoT Edge デバイス上で 1 回行われます。
IoT Edge デバイスで config.yaml ファイルを開きます。 Linux システムでは、このファイルは /etc/iotedge/config.yamlにあります。 Windows システムでは、このファイルは C:\ProgramData\iotedge\config.yamlにあります。 構成ファイルは保護されているため、構成ファイルにアクセスするには管理特権が必要です。 Linux システムの場合、好みのテキスト エディターでファイルを開く前に
sudo
コマンドを使用します。 Windows では、管理者としてメモ帳などのテキスト エディターを開き、ファイルを開きます。config.yaml ファイルで、Edge エージェント モジュール の仕様 セクションを見つけます。 IoT Edge エージェント定義には、環境変数を追加できる env パラメーターが含まれています。
env パラメーターのプレースホルダーである中かっこを削除し、新しい行に新しい変数を追加します。 YAML のインデントは 2 つのスペースであることを忘れないでください。
https_proxy: "<proxy URL>"
IoT Edge ランタイムでは既定で、AMQP を使用して IoT Hub と通信します。 一部のプロキシ サーバーでは、AMQP ポートをブロックします。 この場合は、WebSocket 経由で AMQP を使用するように、edgeAgent を構成することも必要になります。 2 つ目の環境変数を追加します。
UpstreamProtocol: "AmqpWs"
環境変数する
config.yaml への変更を保存し、エディターを閉じます。 IoT Edge を再起動して、変更を有効にします。
Linux および IoT Edge for Linux on Windows:
sudo systemctl restart iotedge
Windows コンテナーを利用する Windows 環境:
Restart-Service iotedge
環境変数セクションに https_proxy パラメーターを追加し、その値としてプロキシ URL を設定します。
[agent] name = "edgeAgent" type = "docker" [agent.config] image = "mcr.microsoft.com/azureiotedge-agent:1.4" [agent.env] # "RuntimeLogLevel" = "debug" # "UpstreamProtocol" = "AmqpWs" "https_proxy" = "<proxy URL>"
IoT Edge ランタイムでは既定で、AMQP を使用して IoT Hub と通信します。 一部のプロキシ サーバーでは、AMQP ポートをブロックします。 この場合は、WebSocket 経由で AMQP を使用するように、edgeAgent を構成することも必要になります。
UpstreamProtocol
パラメーターをコメント解除します。[agent.config] image = "mcr.microsoft.com/azureiotedge-agent:1.4" [agent.env] # "RuntimeLogLevel" = "debug" "UpstreamProtocol" = "AmqpWs" "https_proxy" = "<proxy URL>"
変更を保存してエディターを閉じます。 最新の変更を適用します。
sudo iotedge config apply
docker inspect edgeAgent
セクションでEnv
を使用してプロキシ設定が反映されていることを確認します。 そうでない場合は、コンテナーを再作成する必要があります。sudo docker rm -f edgeAgent
IoT Edge ランタイムは 1 分以内に
edgeAgent
を再作成する必要があります。 コンテナーedgeAgent
再度実行されたら、プロキシ設定をdocker inspect edgeAgent
し、構成ファイルと一致するかどうかを確認します。
配置マニフェストを構成する
IoT Edge デバイスがプロキシ サーバーと連携するように構成されたら、今後の配置マニフェストで引き続き HTTPS_PROXY環境変数を宣言する必要があります。 配置マニフェストを編集するには、Azure portal ウィザードを使用するか、配置マニフェストの JSON ファイルを編集します。
edgeAgent と edgeHub の 2 つのランタイム モジュールは、IoT Hub との接続を維持できるよう、必ずプロキシ サーバー経由で通信するように構成してください。 edgeAgent モジュールからプロキシ情報を削除した場合、前のセクションで説明したように、接続を再確立する唯一の方法は、デバイス上の構成ファイルを編集することです。
edgeAgent モジュールと edgeHub モジュールに加えて、他のモジュールにはプロキシ構成が必要になる場合があります。 BLOB ストレージなど、IoT Hub に加えて Azure リソースにアクセスする必要があるモジュールには、デプロイ マニフェスト ファイルで HTTPS_PROXY 変数が指定されている必要があります。
次の手順は、IoT Edge デバイスの有効期間を通して適用できます。
Azure portal
モジュールの設定ウィザードを使用して IoT Edge デバイスの配置を作成する場合は、どのモジュールにも [環境変数] セクションがあり、ここでプロキシ サーバー接続を構成できます。
IoT Edge エージェントおよび IoT Edge ハブ モジュールを構成するには、ウィザードの最初の手順で [Runtime Settings]\(ランタイムの設定\) を選択します。
https_proxy 環境変数を IoT Edge エージェントと IoT Edge ハブ モジュール定義の両方に追加します。 お使いの IoT Edge デバイス上の構成ファイルに UpstreamProtocol 環境変数を含めた場合は、IoT Edge エージェント モジュールの定義にもこの環境変数を追加します。
配置マニフェストに追加する他のモジュールはすべて、同じパターンに従います。
JSON 配置マニフェスト ファイル
Visual Studio Code のテンプレートを使用するか、または手動で JSON ファイルを作成して、IoT Edge デバイスの配置を作成した場合、各モジュール定義に環境変数を直接追加できます。
次の JSON 形式を使用します。
"env": {
"https_proxy": {
"value": "<proxy URL>"
}
}
環境変数が含まれる場合、モジュール定義は次の edgeHub 例のようになります。
"edgeHub": {
"type": "docker",
"settings": {
"image": "mcr.microsoft.com/azureiotedge-hub:1.1",
"createOptions": "{}"
},
"env": {
"https_proxy": {
"value": "http://proxy.example.com:3128"
}
},
"status": "running",
"restartPolicy": "always"
}
お使いの IoT Edge デバイス上の config.yaml ファイルに UpstreamProtocol 環境変数を含めた場合は、IoT Edge エージェント モジュールの定義にもこの環境変数を追加します。
"env": {
"https_proxy": {
"value": "<proxy URL>"
},
"UpstreamProtocol": {
"value": "AmqpWs"
}
}
トラフィック検査プロキシとの連携
Zscaler のような一部のプロキシでは、TLS で暗号化されたトラフィックを検査できます。 TLS トラフィックの検査中にプロキシによって返される証明書は、ターゲット サーバーからの証明書ではなく、プロキシの独自のルート証明書によって署名された証明書です。 既定では、このプロキシの証明書は IoT Edge モジュール (edgeAgent と edgeHubを含む) によって信頼されず、TLS ハンドシェイクは失敗します。
これを解決するには、プロキシのルート証明書がオペレーティング システムと IoT Edge モジュールの両方によって信頼されている必要があります。
ホスト オペレーティング システムの信頼されたルート証明書ストアでプロキシ証明書を構成します。 ルート証明書をインストールする方法の詳細については、「ルート CA を OS 証明書ストアにインストールする」を参照してください。
信頼バンドル内の証明書を参照して、プロキシ サーバー経由で通信するように IoT Edge デバイスを構成します。 信頼バンドルを構成する方法の詳細については、「信頼されたルート CA (信頼バンドル) を管理する」を参照してください。
IoT Edge によって管理されていないコンテナーに対してトラフィック検査プロキシのサポートを構成するには、プロキシ プロバイダーにお問い合わせください。
IoT Edge が通信する宛先の完全修飾ドメイン名 (FQDN)
プロキシに、インターネット接続のすべての FQDN を許可リストする必要があるファイアウォールがある場合は、IoT Edge デバイスからの接続を許可する の一覧を確認して、追加する FQDN を決定します。
次のステップ
IoT Edge ランタイムのロールに関する詳細を確認する
「Azure IoT Edge での一般的な問題と解決」でインストールと構成に関するエラーをトラブルシューティングする