適用対象: IoT Edge 1.1
重要
IoT Edge 1.1 のサポート終了日は、2022 年 12 月 13 日でした。 この製品、サービス、テクノロジ、または API がどのようにサポートされているかについては、 Microsoft 製品ライフサイクル を確認してください。 最新バージョンの IoT Edge への更新の詳細については、「 IoT Edge の更新」を参照してください。
Azure IoT Edge では、IoT Edge デバイスでの拡張オフライン操作がサポートされ、ダウンストリーム デバイスでのオフライン操作も可能になります。 IoT Edge デバイスが IoT Hub に接続できるなんらかの方法がある限り、そのデバイスとすべてのダウンストリーム デバイスは、断続的なインターネット接続により、またはインターネット接続なしに、機能し続けることができます。
動作方法
IoT Edge デバイスがオフライン モードになると、IoT Edge ハブは 3 つのロールを担います。 第一に、アップストリーム方向のすべてのメッセージを格納し、デバイスが再接続されるまで保存します。 次に、IoT Hub に代わってモジュールとダウンストリーム デバイスを認証し、動作を継続できるようにします。 3 つ目は、通常 IoT Hub を経由するダウンストリーム デバイス間の通信を可能にします。
次の例は、IoT Edge のシナリオがオフライン モードでどのように動作するかを示しています。
デバイスを構成する
IoT Edge デバイスでは、オフライン機能が自動的に有効になります。 その機能を他のデバイスに拡張するには、各自に割り当てられた親デバイスを信頼するようにダウンストリーム デバイスを構成し、device-to-cloud 通信をゲートウェイとして親を経由するようにルーティングする必要があります。
IoT Hub との同期
IoT Edge ランタイムのインストール後、IoT Edge デバイスを少なくとも 1 回はオンラインにして、IoT Hub と同期させる必要があります。 この同期した状態で、IoT Edge デバイスにより、割り当てられているすべてのダウンストリーム デバイスに関する詳細情報が取得されます。 また、IoT Edge デバイスにより、ローカル キャッシュが安全に更新されてオフライン操作が有効になり、利用統計情報メッセージのローカル ストレージの設定が取得されます。
オフラインにする
IoT Hub から切断されている間、IoT Edge デバイス、そのデプロイ済みのモジュール、およびすべてのダウンストリーム デバイスは無期限に動作できます。 オフライン中にモジュールとダウンストリーム デバイスは、IoT Edge ハブによって認証することで起動と再起動を行うことができます。 IoT Hub にアップストリーム方向でバインドされている利用統計情報は、ローカルに格納されます。 ダイレクト メソッドまたはメッセージによって、モジュール間またはダウンストリーム デバイス間の通信が維持されます。
IoT Hub との再接続と再同期
IoT Hub との接続が復元されると、IoT Edge デバイスは再同期されます。 ローカルに保存されたメッセージは IoT Hub にすぐに配信されますが、接続速度、IoT Hub 待ち時間、および関連する要因に依存します。 これらのメッセージは、格納された際と同じ順序で配信されます。
モジュールおよびデバイスにおける、必要なプロパティと報告されたプロパティとの違いが調整されます。 IoT Edge デバイスにより、割り当てられている一連のダウンストリーム デバイスへのすべての変更が更新されます。
制約と制限
この記事で説明する拡張オフライン機能は、 IoT Edge バージョン 1.0.7 以降で使用できます。 それより前のバージョンには、オフライン機能のサブセットが備わっています。 拡張オフライン機能を備えていない既存の IoT Edge デバイスは、ランタイム バージョンを変更してアップグレードすることはできませんが、これらの機能を取得するために新しい IoT Edge デバイス ID を使用して再構成する必要があります。
ダウンストリーム デバイスとして追加できるのは、IoT Edge 以外のデバイスのみです。
初期の 1 回限りの同期の後、IoT Edge デバイスとその割り当てられたダウンストリーム デバイスは、無期限にオフラインで機能できます。ただし、メッセージのストレージは、Time-to-live (TTL) 設定と、メッセージを格納するために使用可能なディスク領域によって異なります。
デバイスの EdgeAgent は、新しいデプロイや失敗した展開などの展開状態に変化がある場合に、報告されるプロパティを更新します。 デバイスがオフラインの場合、 EdgeAgent は Azure portal に状態を報告できません。 そのため、IoT Edge デバイスにインターネット接続がない場合、Azure portal のデバイスの状態は 200 OK のままになることがあります。
親デバイスと子デバイスを設定する
既定では、親デバイスは最大 100 の子を持つことができます。 この制限を変更するには、edgeHub モジュールで MaxConnectedClients 環境変数を設定します。 子デバイスが持つ親は 1 つだけです。
注
ダウンストリーム デバイスは、インターネットまたはゲートウェイ デバイスに (IoT Edge 対応かどうかに関係なく) 直接データを出力します。 子デバイスには、入れ子になったトポロジ内のダウンストリーム デバイスまたはゲートウェイ デバイスを使用できます。
ダウンストリーム デバイスには、同じ IoT Hub に登録されている IoT Edge 以外のデバイスを指定できます。
IoT Edge デバイスと IoT デバイスの間に親子関係を作成することに慣れていない場合は、「 Azure IoT Hub に対するダウンストリーム デバイスの認証」を参照してください。 対称キー、自己署名 X.509、CA 署名 X.509 の各セクションでは、デバイスの作成時に Azure portal と Azure CLI を使用して親子関係を定義する方法の例を示しています。 既存のデバイスの場合は、親デバイスまたは子デバイスのデバイス詳細ページからリレーションシップを宣言できます。
親デバイスをゲートウェイとして設定する
親/子関係は、透過的なゲートウェイと考えることができます。子デバイスは IoT Hub 内に独自の ID を持っていますが、クラウドでの通信はその親経由で行われます。 セキュリティで保護された通信では、親デバイスが信頼できるソースに由来していることを子デバイスで検証できる必要があります。 そうしないと、サードパーティによって親を偽装する悪意のあるデバイスが設定され、通信が傍受される可能性があります。
この信頼関係を作成する 1 つの方法については、次の記事で詳しく説明されています。
DNS サーバーの指定
堅牢性を向上させるため、環境内で使用する DNS サーバー アドレスを指定することをお勧めします。 IoT Edge 用の DNS サーバーを設定するには、 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.0",
"routes": {},
"storeAndForwardConfiguration": {
"timeToLiveSecs": 7200
}
}
}
システム モジュール用のホスト ストレージ
既定では、メッセージとモジュールの状態情報は、IoT Edge ハブのローカル コンテナー ファイルシステムに格納されます。 信頼性を向上させるために、特にオフラインで操作する場合は、専用のストレージをホスト IoT Edge デバイスに設定することもできます。 詳細については、「デバイスのローカル ストレージへのアクセス権をモジュールに付与する」を参照してください。
次のステップ
親/子デバイス接続用の透過的なゲートウェイの設定方法の詳細を確認します。