IoT Edge デバイス、モジュール、子デバイスの拡張オフライン機能について理解する

適用対象:IoT Edge 1.4 チェックマーク IoT Edge 1.4

重要

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

Azure IoT Edge では、IoT Edge デバイスでの拡張オフライン操作がサポートされ、ダウンストリーム デバイスでのオフライン操作も可能になります。 IoT Edge デバイスが IoT Hub に接続できるなんらかの方法がある限り、そのデバイスとすべてのダウンストリーム デバイスは、断続的なインターネット接続により、またはインターネット接続なしに、機能し続けることができます。

しくみ

IoT Edge デバイスがオフライン モードになると、IoT Edge ハブは次の 3 つの役割を担います。

  • アップストリームに送信されるメッセージを格納し、デバイスが再接続するまでメッセージを保存します。
  • モジュールとダウンストリーム デバイスを引き続き操作できるように、IoT Hubの代理として機能します。
  • 通常はIoT Hub経由するダウンストリーム デバイス間の通信を有効にします。

次の例は、IoT Edge のシナリオがオフライン モードでどのように動作するかを示しています。

  1. デバイスの構成

    IoT Edge デバイスでは、オフライン機能が自動的に有効になります。 その機能を他のデバイスに拡張するには、各自に割り当てられた親デバイスを信頼するようにダウンストリーム デバイスを構成し、device-to-cloud 通信をゲートウェイとして親を経由するようにルーティングする必要があります。

  2. IoT Hub と同期する

    IoT Edge ランタイムのインストール後、IoT Edge デバイスを少なくとも 1 回はオンラインにして、IoT Hub と同期させる必要があります。 この同期した状態で、IoT Edge デバイスにより、割り当てられているすべてのダウンストリーム デバイスに関する詳細情報が取得されます。 また、IoT Edge デバイスにより、ローカル キャッシュが安全に更新されてオフライン操作が有効になり、利用統計情報メッセージのローカル ストレージの設定が取得されます。

  3. オフラインにする

    IoT Hub から切断されている間、IoT Edge デバイス、そのデプロイ済みのモジュール、およびすべてのダウンストリーム デバイスは無期限に動作できます。 オフライン中にモジュールとダウンストリーム デバイスは、IoT Edge ハブによって認証することで起動と再起動を行うことができます。 IoT Hub にアップストリーム方向でバインドされている利用統計情報は、ローカルに格納されます。 ダイレクト メソッドまたはメッセージによって、モジュール間またはダウンストリーム デバイス間の通信が維持されます。

  4. IoT Hub に再接続して再同期する

    IoT Hub との接続が復元されると、IoT Edge デバイスは再同期されます。 ローカルに保存されたメッセージは IoT Hub にすぐに配信されますが、接続速度、IoT Hub 待ち時間、および関連する要因に依存します。 これらのメッセージは、格納された際と同じ順序で配信されます。

    モジュールおよびデバイスにおける、必要なプロパティと報告されたプロパティとの違いが調整されます。 IoT Edge デバイスにより、割り当てられている一連のダウンストリーム デバイスへのすべての変更が更新されます。

制約と制限

IoT Edgeデバイスとその割り当てられたダウンストリーム デバイスは、最初の 1 回限りの同期後に無期限にオフラインで機能できます。ただし、メッセージの保存は、有効期間 (TTL) の設定と、メッセージを格納するための使用可能なディスク領域によって異なります。

デバイスの EdgeAgent では、新規または失敗したデプロイなど、デプロイの状態が変更されるたびに、報告されるプロパティが更新されます。 デバイスがオフラインの場合、EdgeAgent は Azure portal に状態を報告できません。 そのため、IoT Edge デバイスにインターネット接続がない場合は、Azure portal でのデバイスの状態は 200 OK のままである可能性があります。

親デバイスと子デバイスを設定する

既定では、親デバイスは最大 100 の子を持つことができます。 edgeHub モジュールで MaxConnectedClients 環境変数を設定すると、この制限を変更できます。 子デバイスが持つ親は 1 つだけです。

Note

ダウンストリーム デバイスは、インターネットまたはゲートウェイ デバイスに (IoT Edge 対応かどうかに関係なく) 直接データを出力します。 子デバイスには、入れ子になったトポロジ内のダウンストリーム デバイスまたはゲートウェイ デバイスを使用できます。

ダウンストリーム デバイスには、同じ IoT Hub に登録されている任意のデバイス (IoT Edge または IoT Edge 以外) を指定できます。

IoT Edge デバイスと IoT デバイスの間に親子関係を作成する方法の詳細については、「ダウンストリーム デバイスを認証してAzure IoT Hubする」を参照してください。 対称キー、自己署名 X.509、CA 署名 X.509 の各セクションでは、デバイスの作成時に Azure portal と Azure CLI を使用して親子関係を定義する方法の例を示しています。 既存のデバイスの場合は、親デバイスまたは子デバイスのAzure portalにあるデバイスの詳細ページからリレーションシップを宣言できます。

2 つのIoT Edge デバイス間で親子関係を作成する方法の詳細については、「ダウンストリーム IoT Edge デバイスを Azure IoT Edge ゲートウェイに接続する」を参照してください。

親デバイスをゲートウェイとして設定する

親/子関係は、透過的なゲートウェイと考えることができます。子デバイスは IoT Hub 内に独自の ID を持っていますが、クラウドでの通信はその親経由で行われます。 セキュリティで保護された通信では、親デバイスが信頼できるソースに由来していることを子デバイスで検証できる必要があります。 そうしないと、サードパーティによって親を偽装する悪意のあるデバイスが設定され、通信が傍受される可能性があります。

この信頼関係を作成する 1 つの方法については、次の記事で詳しく説明されています。

DNS サーバーの指定

堅牢性を向上させるには、環境で使用される DNS サーバー アドレスを指定することを強くお勧めします。 DNS サーバーを IoT Edge 用に設定するには、トラブルシューティングの記事の「Edge エージェント モジュールで "空の構成ファイル" がレポートされ、デバイスでモジュールが開始しない」をご覧ください。

オプションのオフライン設定

デバイスがオフラインになった場合は、接続が再び確立されるまで、すべての device-to-cloud メッセージが IoT Edge 親デバイスに格納されます。 オフライン メッセージの格納と転送は、IoT Edge ハブ モジュールによって管理されます。

長期間オフラインになる可能性があるデバイスの場合は、次の 2 つのIoT Edge ハブ設定を構成してパフォーマンスを最適化します。

  • ライブ時間の設定増やすと、IoT Edge ハブはデバイスが再接続するまでメッセージを保持します。
  • メッセージ ストレージ用のディスク領域を追加します。

Time to Live

有効期間の設定は、メッセージの配信が期限切れになるまで待機できる時間 (秒単位) です。 既定値は 7200 秒 (2 時間) です。 最大値は、整数の変数の最大値 (約 20 億) によってのみ制限されます。

この設定は、モジュール ツインに格納される、IoT Edge ハブの必須のプロパティです。 Azure portal で構成するか、デプロイ マニフェスト内に直接構成できます。

"$edgeHub": {
    "properties.desired": {
        "schemaVersion": "1.1",
        "routes": {},
        "storeAndForwardConfiguration": {
            "timeToLiveSecs": 7200
        }
    }
}

システム モジュール用のホスト ストレージ

既定では、メッセージとモジュールの状態情報は、IoT Edge ハブのローカル コンテナー ファイルシステムに格納されます。 信頼性を向上させるために、特にオフラインで操作する場合は、専用のストレージをホスト IoT Edge デバイスに設定することもできます。 詳細については、「 デバイスのローカル ストレージへのアクセス権をモジュールに付与する」を参照してください。

次の手順

親/子デバイス接続用の透過的なゲートウェイの設定方法の詳細を確認します。