適用対象: IoT Edge 1.5
重要
IoT Edge 1.5 LTS は、サポートされているリリースです。 IoT Edge 1.4 LTS は、2024 年 11 月 12 日をもってサポートが終了しています。 以前のリリースの場合は、「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はプロキシ サーバーのアドレスです。 プロキシ サーバーで認証が必要な場合は、 プロキシ ホストの一部としてユーザー:パスワード@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 デバイス
Windows 上の IoT Edge for Linux を使用して IoT Edge ランタイムをインストールする場合、IoT Edge ランタイムは既定で Linux 仮想マシンにインストールされます。 他の手順をインストールまたは更新する必要はありません。
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 に含めることができない場合は、-ProxyCredential
内で -InvokeWebRequestParameters
パラメーターを使用します。 たとえば、 にします。
$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」を参照してください。
IoT Edge と Moby を構成する
IoT Edge では、IoT Edge デバイスで実行されている 2 つのデーモンを使用します。 Moby デーモンは、コンテナー レジストリからコンテナー イメージをプルします。 IoT Edge デーモンは IoT Hub と通信します。
Moby デーモンと IoT Edge デーモンの両方を構成して、継続的なデバイス機能にプロキシ サーバーを使用します。 初期セットアップ中に IoT Edge デバイスでこの手順を実行します。
Moby デーモン
Moby は Docker 上に構築されているため、環境変数を使用して Moby デーモンを構成するには、Docker のドキュメントを参照してください。 DockerHub や Azure Container Registries を含むほとんどのコンテナー レジストリは 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 aziot-edged
次のテキストを入力して、<proxy URL> をお使いのプロキシ サーバーのアドレスとポートに置き換えます。 その後、保存して終了します。
[Service]
Environment="https_proxy=<proxy URL>"
バージョン 1.2 以降の IoT Edge では、IoT Hub または IoT Hub Device Provisioning Service でのデバイスのプロビジョニングを処理するために、IoT ID サービスが使用されます。 ターミナルでエディターを開き、IoT ID サービス デーモンを構成します。
sudo systemctl edit aziot-identityd
次のテキストを入力して、<proxy URL> をお使いのプロキシ サーバーのアドレスとポートに置き換えます。 その後、保存して終了します。
[Service]
Environment="https_proxy=<proxy URL>"
サービス マネージャーを更新して、新しい構成を選択します。
sudo systemctl daemon-reload
IoT Edge システム サービスを再起動して、両方のデーモンに変更を適用します。
sudo iotedge system restart
環境変数と新しい構成が存在することを確認します。
systemctl show --property=Environment aziot-edged
systemctl show --property=Environment aziot-identityd
IoT Edge for Linux on Windows を使用する Windows
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 デバイスで、構成ファイル
/etc/aziot/config.toml
を開きます。 構成ファイルにアクセスするには、管理者特権が必要です。 Linux システムの場合、好みのテキスト エディターでファイルを開く前にsudo
コマンドを使用します。構成ファイルで、
[agent]
セクションを見つけます。ここには、edgeAgent モジュールが起動時に使用するすべての構成情報が含まれています。[agent]
セクションにコメントがないことを確認します。[agent]
セクションがない場合はconfig.toml
に追加します。 IoT Edge エージェント定義には、環境変数を追加できる[agent.env]
サブセクションが含まれています。https_proxy パラメーターを環境変数セクションに追加し、プロキシ URL をその値として設定します。
[agent] name = "edgeAgent" type = "docker" [agent.config] image = "mcr.microsoft.com/azureiotedge-agent:1.5" [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.5" [agent.env] # "RuntimeLogLevel" = "debug" "UpstreamProtocol" = "AmqpWs" "https_proxy" = "<proxy URL>"
環境変数セクションに https_proxy パラメーターを追加し、その値としてプロキシ URL を設定します。
[agent] name = "edgeAgent" type = "docker" [agent.config] image = "mcr.microsoft.com/azureiotedge-agent:1.5" [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.5" [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 ファイルを編集します。
IoT Hub との接続を維持できるように、プロキシ サーバー経由で通信するように、常に 2 つのランタイム モジュール edgeAgent と edgeHub を構成します。 edgeAgent モジュールからプロキシ情報を削除する場合、接続を再確立する唯一の方法は、前のセクションで説明したように、デバイス上の構成ファイルを編集することです。
edgeAgent モジュールと edgeHub モジュールに加えて、他のモジュールにはプロキシ構成が必要になる場合があります。 Blob Storage など、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 デバイスの配置を作成した場合、各モジュール定義に環境変数を直接追加できます。 Azure portal で追加しなかった場合は、ここで JSON マニフェスト ファイルに追加します。
<proxy URL>
を実際の値に置き換えます。
次の JSON 形式を使用します。
"env": {
"https_proxy": {
"value": "<proxy URL>"
}
}
環境変数が含まれている場合、モジュール定義は次の edgeHub の例のようになります。
"edgeHub": {
"type": "docker",
"settings": {
"image": "mcr.microsoft.com/azureiotedge-hub:1.5",
"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 の一般的な問題と解決策のインストールと構成のエラーのトラブルシューティングを行います。