Azure Sphere 用の Azure IoT Edgeを設定する

Azure IoT Edge は、Azure Sphere や Azure IoT Hub などのダウンストリーム デバイス間のフィルター処理レイヤーとデータ処理レイヤーを提供します。 Azure Sphere デバイスで大量のデータまたは後処理が必要なデータが生成される場合は、Azure IoT Edgeの使用を検討してください。

このトピックでは、Azure Sphere で Azure IoT Edge デバイスを設定する手順について説明します。 Azure Sphere では、Azure IoT Edge のバージョン 1.1 と 1.2 の両方がサポートされています。手順に大きな違いがあります。 メインの違いは次のとおりです。

  • パッケージ名が から iotedgeaziot-edge変更されました。
  • 既定の構成ファイルには、新しい名前と場所があります。 Azure IoT Edge 1.1 では、構成ファイルは /etc/iotedge/config.yaml でした。 Azure IoT Edge 1.2 では、構成ファイルは /etc/aziot/config.toml です
  • Azure IoT Edge 1.2 には、ネットワーク上の DNS サーバーを介してアクセスできる完全修飾ドメイン名 (FQDN) が必要です。

このトピックのタスクを完了すると、透過的なゲートウェイとして機能する Azure IoT Edge デバイスを介してデータをAzure IoT Hubに送信するように Azure Sphere デバイスが構成されます。 Azure IoT Edge モジュール ガイドに従って、Azure IoT Edge デバイス上のモジュールでデータフィルター処理と処理を追加できます。

開始する前に

このトピックの手順では、次のことを前提としています。

  • Azure Sphere デバイスが USB で PC に接続されている。
  • Azure サブスクリプションをお持ちの場合。
  • Azure IoT Hub インスタンスを作成し、デバイスを手動でプロビジョニングしました。 手順 (手順 6) の後半で、IoT Hubのカタログ CA 証明書を使用する必要があることに注意してください。
  • リソース グループが作成されており、Azure IoT HubおよびIoT Edgeサービスに関連するすべてのリソースがこのリソース グループに属している必要があります。

大事な

Azure サブスクリプションは無料で作成できますが、サインアップ プロセスではクレジット カード番号を入力する必要があります。 Azure には、いくつかのレベルのサブスクリプション サービスが用意されています。 既定では、Azure IoT Hub インスタンスを作成するときに、毎月のサービス料金が必要な Standard レベルが選択されます。 月額料金を回避するには、Free レベルを選択します。 Free レベルには、デバイス ツインなど、Azure IoT Hub インスタンスでデバイスを使用するために必要なサービスが含まれます。 Azure サブスクリプションをお持ちでない場合は、開始 する前に無料アカウントを作成 してください。

概要

Azure IoT Edge デバイスをセットアップし、Azure Sphere デバイスで動作するように構成するには、複数ステップのプロセスが必要です。特に、Azure IoT Edgeに慣れていない場合は、手順を実行するために約 8 時間を計画する必要があります。 Azure IoT Edge を初めて使用する場合は、各セクションのクイック スタートの手順に従って、Linux 仮想マシン上で実行されるIoT Edge デバイスを設定して構成します。

これらの手順は、Azure Sphere カタログと Azure IoT Edge デバイスごとに 1 回だけ完了する必要があります。ただし、各 Azure Sphere デバイスをAzure IoT Hubで手動で構成し、Azure IoT Edge デバイスを Azure Sphere デバイスの親として設定する必要があります。

セットアップ手順は、次の 3 つの論理グループに分割できます。

  • IoT Edge デバイスを透過的ゲートウェイとして作成して構成する

    • 手順 1. Azure IoT Edge デバイスを作成します。
    • 手順 2. Azure IoT Edge ゲートウェイ デバイスをサーバーとして構成します。
    • 手順 3. 通信のために Azure IoT Edge ゲートウェイ デバイス ポートを開きます。
    • 手順 4. config.toml (Azure IoT Edge バージョン 1.2) または config.yaml (Azure IoT Edge バージョン 1.1) のゲートウェイ ホスト名を更新します。
  • Azure IoT Hubで Azure Sphere デバイスを構成する

    • 手順 5. Azure IoT Edge デバイスを Azure Sphere デバイスの親として設定します。
  • Azure Sphere デバイスとIoT Edge デバイスの間に信頼された接続を確立する

    • 手順 6. Azure Sphere デバイスのカタログ CA 証明書を Azure IoT Edge デバイスに提供します。
    • 手順 7. Azure IoT Edge デバイスのルート CA 証明書を Azure Sphere デバイスに提供します。

手順 1. Azure IoT Edge デバイスを作成する

Azure IoT Edge デバイスを設定し、まだ登録していない場合は、Azure IoT Hubに登録する必要があります。

Device Provisioning Service (DPS) を使用して、Azure IoT Edge デバイスをプロビジョニングできます。 ただし、DPS を使用して Azure Sphere デバイスをプロビジョニングすることはできません。 Azure IoT Hub DPS を使用した Azure IoT Edge デバイスのダウンストリームデバイスの自動プロビジョニングはサポートされていません。

IoT Edge クイック スタートの手順に従って、Linux VM または Windows デバイスで実行される Azure IoT Edge デバイスを設定し、Azure IoT Hubに登録できます。

クイック スタートの手順を使用して、次の操作を行います。

  • Azure IoT Edge デバイスをAzure IoT Hub インスタンスに登録します。 この手順では新しい IoT ハブを作成しないでください。Azure IoT Edge デバイスを、既に作成した IoT ハブに登録するだけです。
  • Azure IoT Edge デバイスに Azure IoT Edge ランタイムをインストールして起動します。

メモ

IoT Edge クイック スタートで、モジュールをデプロイする前に停止します。

手順 2. IoT Edge ゲートウェイ デバイスをサーバーとして構成する

手順に従って、透過的なゲートウェイ (Azure IoT Edge 1.2) または Azure IoT Edge 1.1 として機能するように AzureIoT Edge デバイスを構成しますが、「ゲートウェイ デバイスでポートを開く」セクションに到達したら停止します。これらの手順では、証明書ファイルをIoT Edge デバイスにコピーするように指示されていますが、この手順の手順 8 まで VM にファイルをコピーしないでください。

デバイス ゲートウェイをサーバーとして構成するために完了した手順の一部として、既に次のものが用意されています。

  • Azure IoT Edge デバイス証明書を構成しました。
  • Azure IoT Edge ハブ モジュールをデプロイしました。
  • Azure IoT Edgeを介したメッセージのルーティングを構成しました。

また、これらの手順の一環として、次の証明書を作成します。

  • ルート CA 証明書: certs/azure-iot-test-only.root.ca.cert.pem
  • デバイス CA 証明書と秘密キー (IoT Edge デバイスをIoT Hubに登録するために使用):
    • certs/iot-edge-device-identity-<cert-name>-full-chain.cert.pem
    • private/iot-edge-device-identity-<cert-name>.key.pem
  • IOT EDGE CA 証明書と秘密キー (IoT Edge デバイスにコピーされ、その構成ファイルで参照されます)。
    • certs/iot-edge-device-ca-<cert-name>-full-chain.cert.pem
    • private/iot-edge-device-ca-<cert-name>.key.pem

クイック スタートに従っている場合は、証明書を生成するコンピューターが Linux ベースのコンピューターである場合は、デモ証明書を構成するための Linux の手順を使用します。 証明書を生成するコンピューターが Windows ベースのコンピューターである場合は、Windows の指示に従ってデモ証明書を生成します。 Linux VM またはローカル Windows コンピューターにルート証明書をコピーする方法については、こちらのセクションを参照してください。

Azure IoT Edge ルート CA 証明書は手順 7 で変更されますが、手順 8 で元の証明書が必要になります。 元の証明書を再利用できるように、元の証明書のコピーを保持します。

メモ

config.toml (Azure IoT Edge 1.2) または config.yaml (Azure IoT Edge 1.1) ファイルの証明書セクションを更新する場合は、config.toml (Azure IoT Edge 1.2) または config.yaml (Azure IoT Edge 1.1) の行に先行する空白がなく、入れ子になった各証明書が 2 つのスペースでインデントされていることを確認certificates:します。

ファイルを更新したら、edgehub モジュールが Azure IoT Edge デバイスで実行されていることを確認します。

sudo iotedge list

詳細については、「IoT Edge デバイスをゲートウェイとして使用する方法 (Azure IoT Edge 1.2)」または「Azure IoT Edge 1.1」を参照してください。

テスト証明書を使用している場合は、「ダウンストリーム デバイス証明書の作成 (Azure IoT Edge 1.2) または Azure IoT Edge 1.1」に記載されているように、ダウンストリーム デバイス証明書生成する前に停止します。

手順 3. 通信のために Azure IoT Edge ゲートウェイ デバイス ポートを開く

ゲートウェイ デバイスは、ダウンストリーム デバイスからメッセージを受信できる必要があります。 ゲートウェイのシナリオを機能させるには、ダウンストリーム デバイスからの受信トラフィックに対して、IoT ハブでサポートされているプロトコルの少なくとも 1 つが開いている必要があります。

Azure Sphere では、プロトコル MQTT が使用されます。 このプロトコルでは、ポート 8883 が使用されます。

詳細については、「ゲートウェイ デバイスでポートを開く (Azure IoT Edge 1.2)」または「Azure IoT Edge 1.1」を参照してください。

クイック スタートで Edge デバイスを設定した後、Windows VM でポート 8883 を開くには、次の手順に従います。

  1. 必要に応じて、Azure アカウントを使用してAzure portalにログインします。
  2. 「手順 1: Azure IoT Edge デバイスを作成する」セクションで作成した仮想マシンに移動します。
  3. 左側の [設定] セクションで、[ ネットワーク]、[ 受信ポート規則の追加] の順に選択します。
  4. [ 受信ポート規則の追加] ブレードの [ 宛先ポート範囲] で、値を 8883 に変更します。
  5. [ プロトコル] で [TCP] を選択 します
  6. [ 名前] で、値を MQTT に変更します。
  7. その他の設定はすべて既定値のままにし、[ 追加] を選択します。

クイック スタートで Azure IoT Edge デバイスを設定した後、Linux VM でポート 8883 を開くには、次の手順に従います。

  1. 次のコマンドを実行して、MQTT のポートが開いているかどうかをチェックします。

    sudo netstat -lptu

  2. 必要に応じて、次のコマンドを使用してポートを開きます。

    sudo ufw allow 8883

これにより、AZURE IoT Edge Gateway への MQTT プロトコルの通信を許可する受信セキュリティ規則が定義されます。

手順 4. ゲートウェイのホスト名を更新する

この手順では、使用している Azure IoT Edgeのバージョン (Azure IoT Edge 1.2 または Azure IoT Edge 1.1) に応じて、さまざまな手順使用します。

Azure IoT Edge 1.2: config.toml でゲートウェイのホスト名を更新する

Azure IoT Edge ランタイムでは、64 文字未満のホスト名がサポートされています。 通常、物理マシンには長いホスト名はありませんが、クイック スタートの例のように Azure IoT Edge デバイスとして仮想マシンを使用している場合は、ホスト名を手動で構成する必要があります。

無効なホスト名のトラブルシューティングを行うには、 一般的なエラー解決に関するページを参照してください。

クイックスタートで MQTT ポートを構成した後、Azure IoT Edge デバイスホスト名を構成するには、次の手順に従います。

  1. Azure Portal で IoT Edge デバイス (Linux VM) に移動し、概要ページから DNS 名の値をコピーして、IoT Edge ゲートウェイの完全修飾ドメイン名 (FQDN) を見つけます。

  2. 必要に応じて、Azure IoT Edge デバイスにログインします。

  3. テキスト エディターで config.toml ファイルを開きます。

    /etc/aziot/config.toml

  4. config.toml のホスト名セクションに FQDN を貼り付けます。 名前がすべて小文字であることを確認します。

    hostname: "<iotedge_machinename>.<mydomain>"
    

    メモ

    Azure IoT Edge v1.2 以降を使用した設計では、ホスト名は FQDN 名である必要があります (v1.1 のように IP アドレスは許可されなくなりました)。そのため、同じネットワーク上の適切な A レコードを持つ DNS サーバーは必須です。

  5. デーモンを再起動します iotedge

    sudo systemctl restart iotedge

  6. 状態にエラー ("[ERROR]" というプレフィックスが付いた色付きのテキスト) が表示される場合は、デーモン ログで詳細なエラー情報を調べます。

    sudo journalctl -u iotedge --no-pager --no-full

  7. 警告を回避するには、Azure IoT Edge デバイス上のモジュールの DNS 構成を設定して、/etc/docker/daemon.json に構成ファイルを含めます(例:

    {
         "dns": ["<IP address of your DNS server>"]
    }
    

Azure IoT Edge 1.1: config.yaml でゲートウェイのホスト名を更新する

Azure IoT Edge ランタイムでは、64 文字未満のホスト名がサポートされています。 通常、物理マシンには長いホスト名はありませんが、クイック スタートの例のように Azure IoT Edge デバイスとして仮想マシンを使用している場合は、ホスト名を手動で構成する必要があります。

無効なホスト名のトラブルシューティングを行うには、 一般的なエラー解決に関するページを参照してください。

クイックスタートで MQTT ポートを構成した後、Azure IoT Edge デバイスホスト名を構成するには、次の手順に従います。

  1. Azure portalで、仮想マシンに移動します。 [概要] セクションから DNS 名 (マシンの FQDN) の値をコピーします。

  2. 必要に応じて、Azure IoT Edge デバイスにログインします。

  3. テキスト エディターで config.yaml ファイルを開きます。

    /etc/iotedge/config.yaml

  4. config.yaml のホスト名セクションに FQDN を貼り付けます。 名前がすべて小文字であることを確認します。

    `hostname: "<machinename>.<region>.cloudapp.azure.com"`
    

    メモ

    AZURE Sphere では netbios がサポートされていないため、DNS リゾルバーがネットワーク上にある場合は、ホスト名 (IP アドレスまたは実際のホスト名) にベア マシン名を使用する必要がある場合があります。

  5. デーモンを再起動します iotedge

    sudo systemctl restart iotedge

  6. 状態にエラー ("[ERROR]" というプレフィックスが付いた色付きのテキスト) が表示される場合は、デーモン ログで詳細なエラー情報を調べます。

    sudo journalctl -u iotedge --no-pager --no-full

  7. 警告を回避するには、Azure IoT Edge デバイス上のモジュールの DNS 構成を設定して、/etc/docker/daemon.json に構成ファイルを含めます(例:

    {
        "dns": ["<IP address of your DNS server>"]
    }
    

手順 5. Azure IoT Edge デバイスを Azure Sphere デバイスの親として設定する

Azure IoT Edge デバイスを Azure Sphere デバイスの親として設定するには、次の手順に従います。

  1. 上記で手動でプロビジョニングされた Azure Sphere デバイスに移動します。
  2. [ デバイス ID] を選択します
  3. [ 親デバイスなし] の下にある歯車アイコンを選択します。
  4. 親として設定する Azure IoT Edge デバイスを選択します。
  5. [ OK] を選択し、[ 保存] を選択します

Azure IoT Edge デバイスが Azure Sphere デバイスの親になります。

手順 6. Azure Sphere デバイスのカタログ CA 証明書を IoT Edge デバイスに提供する

Azure Sphere デバイス証明書を確認するには、Azure IoT Edge デバイスにカタログ CA の独自のコピーが必要です。

  1. まだ行っていない場合は、カタログ CA 証明書をダウンロードします。 注: Azure IoT Hubの構成の一環として、既完了している必要があります。

    • コマンド プロンプトから、Azure ログインでサインインします。

      az login
      
    • Azure Sphere カタログの CA 証明書をダウンロードします。 このコマンドは、現在の作業ディレクトリの CAcertificate.cer という名前のファイルに証明書をダウンロードします。 ファイルを書き込みアクセス許可を持っているディレクトリにダウンロードするか、ダウンロード操作が失敗することを確認します。 出力ファイルの拡張子は .cer である必要があります。

      az sphere ca-certificate download --resource-group MyResourceGroup --catalog MyCatalog --output-file CACertificate.cer
      
  2. カタログ CA 証明書を PEM 形式に変換します。 Windows マシンで形式を変換する手順の例を次に示します。

    • コンピューター上の証明書のパスを見つけて、証明書をダブルクリックして開きます。
    • [ 詳細 ] タブを開き、[ ファイルにコピー] を選択します。
    • 証明書の エクスポート ウィザードで、[ 次へ] を選択します。
    • Base-64 でエンコードされた X.509 (CER) 形式を選択し、[ 次へ] を選択します。
    • エクスポートする証明書のファイル名を入力し、[ 次へ] を選択します。
    • [ 完了] を選択 してウィザードを完了します。
    • ダウンロードした証明書ファイルの名前を .pem ファイル拡張子に変更します。
  3. カタログ証明書を Azure IoT Edge ルート証明書に追加します。 手順 2 で Azure IoT Edge 証明書を作成したことを忘れないでください。

    • 必要に応じて、Azure IoT Edge デバイスにログインします。
    • デバイスのルート CA 証明書のパスIoT Edge見つけて、テキスト エディターで開きます。 クイックスタートに従った後、Azure IoT Edge git リポジトリで提供されているスクリプトを使用してデモ証明書を作成した場合、ルート CA 証明書の名前は azure-iot-test-only.root.ca.cert.pem です
    • テキスト エディターで Azure Sphere カタログ CA 証明書 (PEM 形式) を開きます。 コンテンツをコピーし、IoT Edgeルート CA 証明書の最後に貼り付けます。
    • Azure IoT Edge ルート CA 証明書に加えられた変更を保存し、ファイルを閉じます。
    • Azure IoT Edge デバイスを再起動します。 Linux Azure IoT Edge デバイスの場合は、 を実行しますsudo systemctl restart iotedge
    • モジュールが Azure IoT Edge デバイスで実行されていることを確認します。 Linux Azure IoT Edge デバイスの場合は、 を実行しますsudo iotedge list

手順 7. Azure IoT Edge デバイスのルート CA 証明書を Azure Sphere デバイスに提供する

Azure IoT Edge デバイス証明書を確認するには、Azure Sphere デバイス (ダウンストリーム デバイス) に、手順 2 で構成した Azure IoT Edge デバイス ルート CA 証明書の独自のコピーが必要です。

詳細については、「ダウンストリーム デバイスを Azure IoT Edge ゲートウェイに接続する」を参照してください。

  1. 元の Azure IoT Edge デバイスルート証明書を見つけます。

    • 元の Azure IoT Edge デバイスルート証明書は、手順 2 で作成した証明書であることを忘れないでください。
    • クイック スタートに従い、IoT Edge git リポジトリで提供されているスクリプトを使用してデモ証明書を作成した場合、ルート CA 証明書は azure-iot-test-only.root.ca.cert.pem と呼ばれます。
  2. Azure IoT Edge ルート証明書をアプリケーション パッケージに追加して、Azure Sphere デバイスにコピーします。

手順 8. IoT ルート証明書をリモート コンピューターにコピーする

Azure IoT Edge ルート証明書をリモート Linux VM またはローカル Windows マシンにコピーするには、次の手順に従います。

  • WinSCP ツールをインストールしてファイルを転送できます。 このツールには GUI が用意されているため、コマンド ライン アプローチよりも使いやすくなっています。

  • コマンド ラインを使用するには、SCP (セキュア コピー) コマンド ライン ツールを使用します。

  • ローカル Windows マシンからリモート Linux VM にファイルを転送するには、Windows PowerShellで次のコマンドを実行します。

    powershell -Command scp -r <path-to-file-name> <userName@remote-ip>:<path-to-destination-directory>
    

    サンプル構文:

    scp C:\Documents\cert.pem AzureUser@edgevmname-west.westus22.cloudapp.azure.com:/home/azureUser/test/

  • リモート Linux VM からローカル Windows マシンにファイルを転送するには、Windows PowerShellで次のコマンドを実行します。

    powershell -Command scp -r <userName@remote-ip>:<path-to-file-name> <path-to-destination-dir>
    

    サンプル構文:

    scp azureUser@edgevmname-west.westus22.cloudapp.azure.com:/home/azureUser/test/cert.pem C:\Documents\

トラブルシューティング

環境内で Azure IoT Edgeの実行に問題が発生した場合は、トラブルシューティングと診断に次の記事を使用します。

次の手順

  • このトピックの手順を完了したら、Azure IoT Edgeを使用して接続する手順に従って、Azure IoT サンプルを実行できます。