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

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

重要

サポートされているリリースは、IoT Edge 1.5 LTS と IoT Edge 1.4 LTS です。 IoT Edge 1.4 LTS は、2024 年 11 月 12 日にサポートが終了します。 以前のリリースの場合は、「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 デバイスにより、割り当てられている一連のダウンストリーム デバイスへのすべての変更が更新されます。

制約と制限

最初の 1 回限りの同期後、IoT Edge デバイスとそれに割り当てられているダウンストリーム デバイスは、無期限にオフラインで機能できます。ただし、メッセージのストレージは、有効期限 (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 デバイスに設定することもできます。 詳細については、「モジュールにデバイスのローカル ストレージへのアクセスを許可する」を参照してください。

次のステップ

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