適用対象: IoT Edge 1.5
重要
IoT Edge 1.5 LTS は、サポートされているリリースです。 IoT Edge 1.4 LTS は、2024 年 11 月 12 日をもってサポートが終了しています。 以前のリリースの場合は、「IoT Edge を更新する」を参照してください。
この記事では、X.509 証明書を使用して Windows デバイス上の 1 つ以上の IoT Edge for Linux を 自動プロビジョニングする手順について説明します。 Azure IoT Hub デバイス プロビジョニング サービス (DPS) を使用して Azure IoT Edge デバイスを 自動的にプロビジョニングします。 自動プロビジョニングに慣れていない場合は、続行する前にプロビジョニングの 概要を 確認してください。
主なタスクを次に示します。
- 証明書とキーを生成する。
- 1 つのデバイスに対して 個別 登録を作成するか、一連のデバイスの グループ登録 を作成します。
- IoT Edge ランタイムがインストールされた Linux 仮想マシンをデプロイし、IoT Hub に接続します。
X.509 証明書を使用すると、運用環境をスケーリングし、デバイスのプロビジョニングを簡素化できます。 通常、X.509 証明書は信頼する証明書チェーンに配置されます。 チェーンは自己署名または信頼されたルート証明書で始まり、チェーン内の各証明書は次の下位証明書に署名します。 このパターンでは、ルート証明書から各中間証明書を介して、デバイスにインストールされた最終的なダウンストリーム デバイス証明書への信頼の委任されたチェーンが作成されます。
前提条件
クラウド リソース
- アクティブな IoT ハブ
- 自分の IoT ハブにリンクされた、Azure 内の IoT Hub デバイス プロビジョニング サービスのインスタンス
- デバイス プロビジョニング サービスのインスタンスをお持ちでない場合は、IoT Hub デバイス プロビジョニング サービス クイックスタートの「新しい IoT Hub デバイス プロビジョニング サービスの作成」および「IoT ハブとデバイス プロビジョニング サービスとをリンクさせる」の手順に従ってください。
- Device Provisioning Service を実行した後、概要ページから [ID スコープ] の値をコピーします。 この値は、IoT Edge ランタイムを構成するときに使用します。
デバイスの要件
以下の最小要件を備えた Windows デバイス:
システム要件
- Windows 101/11 (Pro、Enterprise、IoT Enterprise)
- Windows Server 20191/2022
1 現在のすべての累積更新プログラムがインストールされた Windows 10 および Windows Server 2019 最小ビルド 17763。
ハードウェア要件
- 最小空きメモリ容量: 1 GB
- 最小空きディスク領域:10 GB
仮想化サポート
- Windows 10 で Hyper-V を有効にします。 詳細については、「 Hyper-V のインストール」を参照してください。
- Windows Server、Hyper-V ロールをインストールし、既定のネットワーク スイッチを作成します。 詳細については、「Azure IoT Edge for Linux on Windows の入れ子になった仮想化」を参照してください。
- 仮想マシンで、入れ子になった仮想化を構成します。 詳細については、「Azure IoT Edge for Linux on Windows の入れ子になった仮想化」を参照してください。
ネットワークのサポート
- Windows Server には、既定のスイッチは付属していません。 EFLOW を Windows Server デバイスにデプロイする前に、仮想スイッチを作成する必要があります。 詳細については、 Azure IoT Edge for Linux on Windows 仮想スイッチの作成に関するページを参照してください。
- デスクトップ バージョンの Windows には、EFLOW のインストールに使用できる既定のスイッチが付属しています。 必要な場合は、独自のカスタム仮想スイッチを作成できます。
ヒント
Azure IoT Edge for Linux on Windows のデプロイで GPU アクセラレーション対応の Linux モジュールを使用する場合は、いくつかの構成オプションを検討する必要があります。
GPU アーキテクチャに応じて適切なドライバーをインストールする必要があり、Windows Insider Program ビルドへのアクセスが必要になる場合があります。 構成上の必要性を特定し、それらの前提条件を満たすには、「Azure IoT Edge for Linux on Windows 用の GPU アクセラレーション」を参照してください。
時間をとって、現時点で GPU アクセラレータの前提条件を満たしていることをご確認ください。 インストール中に GPU アクセラレーションが必要な場合は、インストール プロセスを再起動する必要があります。
開発者ツール
Azure IoT Edge for Linux on Windows のインストールと Linux 仮想マシンのデプロイに使用するターゲット デバイスを準備してください。
ターゲット デバイスの実行ポリシーを
AllSigned
に設定します。 現在の実行ポリシーは、管理者特権の PowerShell プロンプトで次のコマンドを使用して確認できます。Get-ExecutionPolicy -List
local machine
の実行ポリシーがAllSigned
されていない場合は、次を使用して実行ポリシーを設定できます。Set-ExecutionPolicy -ExecutionPolicy AllSigned -Force
Azure IoT Edge for Linux on Windows PowerShell モジュールの詳細については、PowerShell 関数リファレンスを参照してください。
デバイス ID 証明書を生成する
デバイス ID 証明書は、証明書の信頼チェーンを介して最上位の X.509 証明機関 (CA) 証明書につながるダウンストリーム証明書です。 デバイス ID 証明書の共通名 (CN) を、デバイスが IoT ハブで使用するデバイス ID に設定します。
デバイス ID 証明書は、IoT Edge デバイスをプロビジョニングし、Azure IoT Hub でデバイスを認証する場合にのみ使用します。 それらは、IoT Edge デバイスによって検証のためにモジュールやダウンストリーム デバイスに提示される CA 証明書のような署名証明書ではありません。 詳細については、Azure IoT Edge 証明書の使用方法に関する詳細のページを参照してください。
デバイス ID 証明書を作成すると、証明書の公開部分を含む .cer または .pem ファイルと、証明書の秘密キーを含む .cer または .pem ファイルの 2 つのファイルが作成されます。 DPS でグループ登録を使用する場合は、信頼の同じ証明書チェーン内の中間またはルート CA 証明書のパブリック部分も必要です。
X.509 を使用して自動プロビジョニングを設定するには、次のファイルが必要です。
- デバイス ID 証明書とその秘密キー証明書。 個々の登録を作成する場合は、デバイス ID 証明書を DPS にアップロードします。 秘密キーは IoT Edge ランタイムに渡されます。
- 完全なチェーン証明書。これには、少なくともデバイス ID と中間証明書が含まれます。 完全なチェーン証明書は IoT Edge ランタイムに渡されます。
- 信頼する証明書チェーンからの中間証明書またはルート CA 証明書。 グループ登録を作成すると、この証明書は DPS にアップロードされます。
注
現時点では、libiothsm の制限により、2038 年 1 月 1 日以降に有効期限が切れる証明書は使用できません。
テスト証明書を使用する (省略可能)
新しい ID 証明書の作成に使用できる証明機関がなく、このシナリオを試したい場合、Azure IoT Edge Git リポジトリには、テスト証明書の生成に使用できるスクリプトがあります。 これらの証明書は開発テストにのみ使用し、運用環境では使用しないでください。
テスト証明書を作成するには、「IoT Edge デバイスの機能をテストするためのデモ用の証明書を作成する」の手順に従います。 証明書生成スクリプトを設定し、ルート CA 証明書を作成するために必要な 2 つのセクションを完了します。 次に、手順に従ってデバイス ID 証明書を作成します。 完了すると、次の証明書チェーンとキー ペアが作成されます。
<WRKDIR>\certs\iot-edge-device-identity-<name>-full-chain.cert.pem
<WRKDIR>\private\iot-edge-device-identity-<name>.key.pem
これらの証明書の両方が IoT Edge デバイス上に必要です。 DPS で個別登録を使用する場合は、.cert.pem ファイルをアップロードします。 DPS でグループ登録を使用する場合は、信頼の同じ証明書チェーンに中間またはルート CA 証明書もアップロードします。 デモ証明書を使用する場合は、グループ登録に <WRKDIR>\certs\azure-iot-test-only.root.ca.cert.pem
証明書を使用します。
DPS の登録を作成する
生成された証明書とキーを使用して、DPS で 1 つまたは複数の IoT Edge デバイスの登録を作成します。
単一の IoT Edge デバイスをプロビジョニングする方法を求めている場合は、個別の登録を作成します。 複数のデバイスをプロビジョニングする必要がある場合は、DPS グループ登録を作成する手順に従います。
DPS 内に登録を作成するときに、デバイス ツインの初期状態を宣言する機会があります。 デバイス ツインでは、ソリューションで必要な任意のメトリック (リージョン、環境、場所、デバイスの種類など) によってデバイスをグループ化するためのタグを設定できます。 これらのタグは、自動展開を作成するために使用されます。
デバイス プロビジョニング サービスでの登録の詳細については、デバイス登録の管理方法に関するページをご覧ください。
DPS 個別登録を作成する
個別登録では、デバイスの ID 証明書の公開部分が渡され、デバイス上の証明書と照合されます。
ヒント
この記事の手順は Azure portal 向けですが、Azure CLI を使用して個別登録を作成することもできます。 詳細については、az iot dps enrollment を参照してください。 この CLI コマンドの一部として、edge-enabled フラグを使用して、登録の対象が IoT Edge デバイスであることを指定します。
Azure portal で、IoT Hub Device Provisioning Service のインスタンスに移動します。
[設定] の下の [登録の管理] を選択します。
[Add individual enrollment]\(個別登録の追加\) を選択し、登録を構成する次の手順を完了します。
メカニズム: [X.509] を選択します。
[プライマリ証明書の .pem ファイルまたは .cer ファイル]: デバイス ID 証明書からパブリック ファイルをアップロードします。 スクリプトを使用してテスト証明書を生成した場合は、次のファイルを選択します。
<WRKDIR>\certs\iot-edge-device-identity-<name>.cert.pem
[IoT Hub のデバイス ID]: 必要に応じて、デバイス ID を指定します。 デバイス ID を使用して、個々のデバイスをモジュール展開のターゲットにすることができます。 デバイス ID を指定しない場合は、X.509 証明書内の共通名 (CN) が使用されます。
[IoT Edge デバイス]: [True] を選択して、その登録が IoT Edge デバイス用のものであることを宣言します。
[このデバイスを割り当てることができる IoT ハブを選択する]: デバイスの接続先になるリンクされた IoT ハブを選択します。 複数のハブを選択でき、デバイスは、選択した割り当てポリシーに従ってそれらのハブの 1 つに割り当てられます。
[デバイス ツインの初期状態]: 必要に応じて、デバイス ツインに追加するタグ値を追加します。 タグを使用して、デバイス グループを自動展開のターゲットにすることができます。 次に例を示します。
{ "tags": { "environment": "test" }, "properties": { "desired": {} } }
[保存] を選択します。
[登録を管理します] で、作成した登録の登録 ID を確認できます。 デバイスをプロビジョニングするときに使用できるので、メモします。
これで、このデバイスの登録が存在しているので、IoT Edge ランタイムによってインストール時にデバイスを自動的にプロビジョニングできます。
IoT Edge をインストールする
ターゲット デバイスに Azure IoT Edge for Linux on Windows をデプロイします。
注
下記の PowerShell の手順では、IoT Edge for Linux on Windows をローカル デバイスにデプロイする方法の概要を示しています。 PowerShell を使用してリモート ターゲット デバイスにデプロイする場合は、リモート PowerShell を使用してリモート デバイスへの接続を確立し、そのデバイスでこれらのコマンドをリモートで実行することができます。
管理者特権の PowerShell セッションで、ターゲット デバイス アーキテクチャに応じて次のいずれかのコマンドを実行し、IoT Edge for Linux on Windows をダウンロードします。
X64、AMD64
$msiPath = $([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi')) $ProgressPreference = 'SilentlyContinue' Invoke-WebRequest "https://aka.ms/AzEFLOWMSI_1_5_LTS_X64" -OutFile $msiPath
ARM64
$msiPath = $([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi')) $ProgressPreference = 'SilentlyContinue' Invoke-WebRequest "https://aka.ms/AzEFLOWMSI_1_5_LTS_ARM64" -OutFile $msiPath
IoT Edge for Linux on Windows をデバイスにインストールします。
Start-Process -Wait msiexec -ArgumentList "/i","$([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi'))","/qn"
インストール コマンドに
INSTALLDIR="<FULLY_QUALIFIED_PATH>"
パラメーターとVHDXDIR="<FULLY_QUALIFIED_PATH>"
パラメーターを追加することで、IoT Edge for Linux on Windows のカスタム インストールと VHDX ディレクトリを指定できます。 たとえば、インストールに D:\EFLOW フォルダーを使用し、VHDX に D:\EFLOW-VHDX を使用する場合は、次の PowerShell コマンドレットを使用できます。Start-Process -Wait msiexec -ArgumentList "/i","$([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi'))","/qn","INSTALLDIR=D:\EFLOW", "VHDXDIR=D:\EFLOW-VHDX"
ターゲット デバイスの実行ポリシーがまだ
AllSigned
に設定されていない場合、これを設定します。 最新の実行ポリシーをチェックしたり実行ポリシーをAllSigned
に設定したりするためのコマンドについては、PowerShell の前提条件を参照してください。IoT Edge for Linux on Windows のデプロイを作成します。 このデプロイによって Linux 仮想マシンが作成され、IoT Edge ランタイムが自動的にインストールされます。
Deploy-Eflow
ヒント
既定では
Deploy-Eflow
コマンドを実行すると、1 GB の RAM、1 つの仮想 CPU コア、16 GB のディスク領域を持つ Linux 仮想マシンを作成します。 ですが、VM に必要なリソースは、デプロイするワークロードに大きく左右されます。 ワークロードを処理するのに十分なメモリがなければ、VM は起動に失敗します。Deploy-Eflow
コマンドのオプションでパラメーターを指定することで、仮想マシンで使用できるリソースをカスタマイズできます。 これは、最小ハードウェア要件を持つデバイスに EFLOW をデプロイするために必要です。たとえば、次のコマンドは、1 つの vCPU コア、1 GB の RAM (MB で表現)、および 2 GB のディスク領域を持つ仮想マシンを作成します。
Deploy-Eflow -cpuCount 1 -memoryInMB 1024 -vmDataSize 2
使用できるすべてのオプション パラメーターについては、「IoT Edge for Linux on Windows 用の PowerShell 関数」を参照してください。
警告
既定では、EFLOW の Linux 仮想マシンには DNS 構成がありません。 DHCP を使用したデプロイでは、DHCP サーバーによって伝達された DNS 構成の取得が試みられます。 DNS の構成を確認して、インターネット接続を確保してください。 詳細については、AzEFLOW-DNS に関するページを参照してください。
GPU をデプロイに割り当てて、GPU アクセラレーション対応の Linux モジュールを有効にできます。 これらの機能にアクセスするには、「Azure IoT Edge for Linux on Windows 用の GPU アクセラレーション」に詳述されている前提条件をインストールする必要があります。
GPU パススルーを使用するには、 コマンドに gpuName、gpuPassthroughType、
Deploy-Eflow
の各パラメーターを追加します。 使用できるすべてのオプション パラメーターについては、「IoT Edge for Linux on Windows 用の PowerShell 関数」を参照してください。警告
ハードウェア デバイスのパススルーを有効にすると、セキュリティ リスクが高まる可能性があります。 該当する場合は、GPU ベンダーが提供する、デバイスのリスク軽減ドライバーをお勧めします。 詳細については、「Discrete Device Assignment を使用したグラフィックス デバイスのデプロイ」を参照してください。
ライセンス条項に同意するには、「Y」と入力します。
必要に応じて、「O」または「R」を入力して [Optional diagnostic data](オプションの診断データ) をオンまたはオフに切り替えます。
デプロイが完了すると、PowerShell ウィンドウに、「デプロイが成功しました」と表示されます。
デプロイが正常に完了したら、デバイスをプロビジョニングする準備が整いました。
クラウド ID を使用してデバイスをプロビジョニングする
デバイスにランタイムをインストールしたら、デバイス プロビジョニング サービスと IoT Hub への接続に使用する情報を使用してデバイスを構成します。
次の情報があることを確認します。
- DPS の ID スコープ値。 この値は、Azure portal の DPS インスタンスの概要ページにあります。
- デバイス上のデバイス ID 証明書チェーン ファイル。
- デバイス上のデバイス ID キー ファイル。
管理者特権の PowerShell セッションで次のコマンドを実行します。 プレースホルダーの値を独自の値に置き換えます。
Provision-EflowVm -provisioningType DpsX509 -scopeId PASTE_YOUR_ID_SCOPE_HERE -registrationId PASTE_YOUR_REGISTRATION_ID_HERE -identityCertPath PASTE_ABSOLUTE_PATH_TO_IDENTITY_CERTIFICATE_HERE -identityPrivateKey PASTE_ABSOLUTE_PATH_TO_IDENTITY_PRIVATE_KEY_HERE
インストールの成功を確認する
IoT Edge for Linux on Windows が IoT Edge デバイスにインストールおよび構成されていることを確認します。
デバイス プロビジョニング サービスで作成した個々の登録が使用されていることを確認します。 Azure portal で Device Provisioning Service インスタンスに移動します。 作成した個別登録の詳細を開きます。 登録の状態が 割り当てられ、デバイス ID が一覧表示されます。
PowerShell セッションで次のコマンドを使用して、お使いの IoT Edge for Linux on Windows 仮想マシンにサインインします。
Connect-EflowVm
注
仮想マシンへの SSH 接続が許可されるアカウントは、それを作成したユーザーだけです。
ログインしたら、次の Linux コマンドを使用して、実行中の IoT Edge モジュールの一覧を確認できます。
sudo iotedge list
IoT Edge サービスのトラブルシューティングを行う必要がある場合は、次の Linux コマンドを使用します。
サービスのトラブルシューティングが必要な場合は、サービス ログを取得します。
sudo iotedge system logs
check
ツールを使用して、デバイスの構成と接続の状態を確認します。sudo iotedge check
注
新しくプロビジョニングされたデバイスで、IoT Edge Hub に関連するエラーが表示される場合があります。
× 運用環境の準備: Edge ハブのストレージ ディレクトリがホスト ファイル システムに保持されています - エラー
edgeHub コンテナーの現在の状態を確認できませんでした
このエラーは、IoT Edge ハブ モジュールが実行されていないために、新しくプロビジョニングされたデバイスで発生します。 このエラーを解決するには、IoT Hub でデバイスのモジュールを設定し、デプロイを作成します。 デバイスのデプロイを作成することで、IoT Edge ハブ モジュールを含むモジュールがデバイス上で開始されます。
新しい IoT Edge デバイスを作成すると、Azure portal に 417 -- The device's deployment configuration is not set
状態コードが表示されます。 この状態は正常であり、デバイスがモジュールのデプロイを受け取る準備ができている状態を意味します。
IoT Edge for Linux on Windows をアンインストールする
デバイスから Azure IoT Edge for Linux on Windows のインストールを削除する場合は、次のコマンドを使用します。
- Windows で [設定] を開きます
- [プログラムの追加と削除] を選択します
- [Azure IoT Edge] アプリを選択します
- [アンインストール] を選択します
次のステップ
デバイス プロビジョニング サービスの登録プロセスでは、新しいデバイスをプロビジョニングするときにデバイス ID とデバイス ツイン タグを設定できます。 これらの値を使用して、デバイスの自動管理を使用して個々のデバイスまたはデバイス のグループをターゲットにします。 Azure portal または Azure CLI を使用して、大規模な IoT Edge モジュールをデプロイおよび監視する方法について説明します。
さらに、以下を実行できます。
- IoT Edge モジュールのデプロイに進んで、デバイスにモジュールをデプロイする方法を確認します。
- IoT Edge for Linux on Windows 仮想マシンで証明書を管理し、ホスト OS から Linux 仮想マシンにファイルを転送する方法について確認します。
- プロキシ サーバー経由で通信するように IoT Edge デバイスを構成する方法について確認します。