対称キーを使用して IoT Edge for Linux on Windows デバイスを作成してプロビジョニングする

適用対象:IoT Edge 1.4 checkmark IoT Edge 1.4

重要

IoT Edge 1.4 がサポートされているリリースです。 以前のリリースの場合は、「IoT Edge を更新する」を参照してください。

この記事では、IoT Edge for Linux on Windows デバイスを登録およびプロビジョニングするエンド ツー エンドの手順について説明します。

IoT ハブに接続するすべてのデバイスには、cloud-to-device または device-to-cloud の通信の追跡に使用されるデバイス ID があります。 デバイスをその接続情報で構成します。これには、IoT ハブ ホスト名、デバイス ID、IoT Hub に対して認証を行うためにデバイスで使用される情報が含まれます。

この記事の手順では、手動プロビジョニングと呼ばれるプロセスについて説明します。ここでは、1 つのデバイスを IoT ハブに接続します。 手動プロビジョニングの場合、IoT Edge デバイスの認証には 2 つのオプションがあります。

  • 対称キー: IoT Hub で新しいデバイス ID を作成すると、サービスによって 2 つのキーが作成されます。 いずれかのキーをデバイスに配置すると、認証時にそのキーが IoT Hub に提示されます。

    この認証方法は比較的すばやく開始できますが、それほど安全ではありません。

  • X.509 自己署名: 2 つの X.509 ID 証明書を作成し、デバイスに配置します。 IoT Hub で新しいデバイス ID を作成するときは、両方の証明書の拇印を指定します。 デバイスでは IoT Hub に対して認証を行うときに、1 つの証明書が提示され、その証明書がその拇印と一致することが IoT によって検証されます。

    この認証方法はより安全であり、運用環境のシナリオの場合に推奨されます。

この記事では、認証方法として対称キーを使用する方法について説明します。 X.509 証明書を使用する場合は、「x.509 証明書を使用して IoT Edge for Linux on Windows デバイスを作成およびプロビジョニングする」を参照してください。

Note

設定するデバイスが多数あり、それぞれを手動でプロビジョニングしたくない場合は、次の記事のいずれかを使用して、IoT Edge が IoT Hub Device Provisioning Service でどのように動作するかを確認してください。

前提条件

この記事では、IoT Edge デバイスを登録し、IoT Edge for Linux on Windows をインストールする方法について説明します。 これらのタスクには、実行するために使用されるさまざまな前提条件とユーティリティがあります。 次に進む前に、すべての前提条件が満たされていることを確認してください。

デバイス管理ツール

デバイスを登録する手順には、Azure portalVisual Studio Code、または Azure CLI を使用できます。 各ユーティリティには、独自の前提条件があり、インストールが必要な場合があります。

Azure サブスクリプション内の無料または標準の IoT ハブ

デバイスの要件

以下の最小要件を備えた Windows デバイス:

  • システム要件

    • Windows 101/11 (Pro、Enterprise、IoT Enterprise)
    • Windows Server 20191/2022
      1 現在のすべての累積更新プログラムがインストールされた Windows 10 および Windows Server 2019 最小ビルド 17763。
  • ハードウェア要件

    • 最小空きメモリ容量: 1 GB
    • 最小空きディスク領域:10 GB
  • 仮想化サポート

  • ネットワークのサポート

    • Windows Server には既定のスイッチは付属していません。 EFLOW を Windows Server デバイスにデプロイする前に、仮想スイッチを作成する必要があります。 詳細については、Windows 上の Linux のために仮想スイッチを作成することに関する記事を参照してください。
    • デスクトップ バージョンの 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 仮想マシンのデプロイに使用するターゲット デバイスを準備してください。

  1. ターゲット デバイスの実行ポリシーを AllSigned に設定します。 現在の実行ポリシーは、管理者特権の PowerShell プロンプトで次のコマンドを使用して確認できます。

    Get-ExecutionPolicy -List
    

    local machine の実行ポリシーが AllSigned になっていない場合は、次のようにして実行ポリシーを設定できます。

    Set-ExecutionPolicy -ExecutionPolicy AllSigned -Force
    

Azure IoT Edge for Linux on Windows PowerShell モジュールの詳細については、PowerShell 関数リファレンスを参照してください。

デバイスを登録する

デバイスを登録するには、好みに応じて Azure portalVisual Studio Code、または Azure CLI を使用できます。

Azure portal の IoT Hubで、IoT Edge デバイスは、Edge 対応ではない IoT デバイスとは別に作成および管理されます。

  1. Azure Portal にサインインし、IoT Hub に移動します。

  2. 左側のウィンドウで、メニューから [デバイス] を選択し、[デバイスを追加する] を選択します。

  3. [デバイスの作成] ページで、次の情報を指定します。

    • 説明的なデバイス ID を作成します。たとえば、my-edge-device-1 (すべて小文字) です。 このデバイス ID は後で使用するので、メモしておいてください。
    • [IoT Edge デバイス] のチェック ボックスをオンにします。
    • 認証の種類として [対称キー] を選択します。
    • 認証キーを自動生成して、新しいデバイスをハブに接続するために、既定の設定を使用します。
  4. [保存] を選択します。

IoT ハブに新しいデバイスが一覧表示されます。

デバイスが IoT ハブに登録されたので、プロビジョニング情報を取得できます。これを使用して、次の手順で IoT Edge ランタイムのインストールとプロビジョニングを完了します。

登録済みデバイスを表示し、プロビジョニング情報を取得する

対称キー認証を使用するデバイスでは、IoT Edge ランタイムのインストールとプロビジョニングを完了するために接続文字列が必要です。 IoT Edge デバイスを作成すると、このデバイスの接続文字列が生成されます。 Visual Studio Code と Azure CLI の場合、接続文字列は JSON 出力に含まれます。 Azure portal を使用してデバイスを作成する場合は、デバイス自体で接続文字列を見つけることができます。 IoT ハブでデバイスを選択すると、デバイス ページに Primary connection string として表示されます。

IoT ハブに接続するエッジ対応デバイスが、IoT ハブの [デバイス] ページに一覧表示されます。 複数のデバイスがある場合は、[IoT Edge デバイス] という種類を選択し、[適用] を選択すると、一覧をフィルター処理できます。

デバイスを設定する準備ができたら、物理デバイスを IoT ハブ内でのその ID にリンクする接続文字列が必要です。 対称キーを使用して認証を行うデバイスでは、接続文字列をポータルでコピーできます。 ポータルで接続文字列を見つけるには、次のようにします。

  1. [デバイス] ページで、一覧から IoT Edge デバイス ID を選択します。
  2. [プライマリ接続文字列] または [セカンダリ接続文字列] のどちらかの値をコピーします。 どちらのキーでも機能します。

IoT Edge をインストールする

ターゲット デバイスに Azure IoT Edge for Linux on Windows をデプロイします。

Note

下記の PowerShell の手順では、IoT Edge for Linux on Windows をローカル デバイスにデプロイする方法の概要を示しています。 PowerShell を使用してリモート ターゲット デバイスにデプロイする場合は、リモート PowerShell を使用してリモート デバイスへの接続を確立し、そのデバイスでこれらのコマンドをリモートで実行することができます。

  1. 管理者特権の 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_4_LTS_X64" -OutFile $msiPath
      
    • ARM64

      $msiPath = $([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi'))
      $ProgressPreference = 'SilentlyContinue'
      Invoke-WebRequest "https://aka.ms/AzEFLOWMSI_1_4_LTS_ARM64" -OutFile $msiPath
      
  2. 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"
    
  3. ターゲット デバイスの実行ポリシーがまだ AllSigned に設定されていない場合、これを設定します。 最新の実行ポリシーをチェックしたり実行ポリシーを AllSigned に設定したりするためのコマンドについては、PowerShell の前提条件を参照してください。

  4. 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 パススルーを使用するには、Deploy-Eflow コマンドに gpuNamegpuPassthroughTypegpuCount の各パラメーターを追加します。 使用できるすべてのオプション パラメーターについては、「IoT Edge for Linux on Windows 用の PowerShell 関数」を参照してください。

    警告

    ハードウェア デバイスのパススルーを有効にすると、セキュリティ リスクが高まる可能性があります。 該当する場合は、GPU ベンダーが提供する、デバイスのリスク軽減ドライバーをお勧めします。 詳細については、「Discrete Device Assignment を使用したグラフィックス デバイスのデプロイ」を参照してください。

  5. ライセンス条項に同意するには、「Y」と入力します。

  6. 必要に応じて、「O」または「R」を入力して [Optional diagnostic data](オプションの診断データ) をオンまたはオフに切り替えます。

  7. デプロイが完了すると、PowerShell ウィンドウに、「デプロイが成功しました」と表示されます。

    A successful deployment will say 'Deployment successful' at the end of the messages, PNG.

    デプロイが正常に完了したら、デバイスをプロビジョニングする準備が整いました。

クラウド ID を使用してデバイスをプロビジョニングする

クラウド ID と認証情報を使用してデバイスを設定する準備ができました。

対称キーを使用してデバイスをプロビジョニングするには、デバイスの接続文字列が必要です。

管理者特権の PowerShell セッションで、ターゲット デバイスに対して次のコマンドを実行します。 プレースホルダー テキストは実際の値に置き換えてください。

Provision-EflowVm -provisioningType ManualConnectionString -devConnString "PASTE_DEVICE_CONNECTION_STRING_HERE"

Provision-EflowVM コマンドの詳細については、「IoT Edge for Linux on Windows 用の PowerShell 関数」を参照してください。

構成が成功したことを確認する

IoT Edge for Linux on Windows が IoT Edge デバイスに正常にインストールされ、構成されたことを確認します。

  1. PowerShell セッションで次のコマンドを使用して、お使いの IoT Edge for Linux on Windows 仮想マシンにログインします。

    Connect-EflowVm
    

    Note

    仮想マシンへの SSH 接続が許可されるアカウントは、それを作成したユーザーだけです。

  2. ログインすると、次の Linux コマンドを使用して、実行中の IoT Edge モジュールの一覧を確認できます。

    sudo iotedge list
    
  3. IoT Edge サービスのトラブルシューティングを行う必要がある場合は、次の Linux コマンドを使用します。

    1. サービスのログを取得します。

      sudo iotedge system logs
      
    2. check ツールを使用して、デバイスの構成と接続の状態を確認します。

      sudo iotedge check
      

    Note

    新しくプロビジョニングされたデバイスでは、IoT Edge ハブに関連するエラーが表示される場合があります。

    × 運用環境の準備: 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 のインストールを削除する場合は、次のコマンドを使用します。

  1. Windows で [設定] を開きます
  2. [プログラムの追加と削除] を選択します
  3. [Azure IoT Edge] アプリを選択します
  4. [アンインストール] を選択します

次のステップ