IoT Edge デバイス、モジュール、子デバイスの拡張オフライン機能について理解するUnderstand extended offline capabilities for IoT Edge devices, modules, and child devices

Azure IoT Edge では、IoT Edge デバイスでの拡張オフライン操作がサポートされており、IoT Edge 以外の子デバイスでのオフライン操作も可能です。Azure IoT Edge supports extended offline operations on your IoT Edge devices, and enables offline operations on non-IoT Edge child devices too. IoT Edge デバイスが IoT Hub に接続できるなんらかの方法がある限り、そのデバイスとすべての子デバイスは、断続的なインターネット接続により、またはインターネット接続なしに、機能し続けることができます。As long as an IoT Edge device has had one opportunity to connect to IoT Hub, that device and any child devices can continue to function with intermittent or no internet connection.

しくみHow it works

IoT Edge デバイスがオフライン モードになると、IoT Edge ハブは 3 つのロールを担います。When an IoT Edge device goes into offline mode, the IoT Edge hub takes on three roles. 第一に、アップストリーム方向のすべてのメッセージを格納し、デバイスが再接続されるまで保存します。First, it stores any messages that would go upstream and saves them until the device reconnects. 第二に、モジュールと子デバイスが動作を継続できるよう、IoT Hub に代わってこれらを認証するために動作します。Second, it acts on behalf of IoT Hub to authenticate modules and child devices so that they can continue to operate. 第三に、通常は IoT Hub を経由する、子デバイス間の通信を可能にします。Third, it enables communication between child devices that normally would go through IoT Hub.

次の例は、IoT Edge のシナリオがオフライン モードでどのように動作するかを示しています。The following example shows how an IoT Edge scenario operates in offline mode:

  1. デバイスを構成するConfigure devices

    IoT Edge デバイスでは、オフライン機能が自動的に有効になります。IoT Edge devices automatically have offline capabilities enabled. その機能を他の IoT デバイスに拡張するには、IoT Hub でデバイス間の親子リレーションシップを宣言する必要があります。To extend that capability to other IoT devices, you need to declare a parent-child relationship between the devices in IoT Hub. 次に、各自に割り当てられた親デバイスを信頼するように子デバイスを構成し、device-to-cloud 通信をゲートウェイとして親を経由するようにルーティングします。Then, you configure the child devices to trust their assigned parent device and route the device-to-cloud communications through the parent as a gateway.

  2. IoT Hub と同期するSync with IoT Hub

    IoT Edge ランタイムのインストール後、IoT Edge デバイスを少なくとも 1 回はオンラインにして、IoT Hub と同期させる必要があります。At least once after installation of the IoT Edge runtime, the IoT Edge device needs to be online to sync with IoT Hub. この同期した状態で、IoT Edge デバイスにより、割り当てられているすべての子デバイスに関する詳細情報が取得されます。In this sync, the IoT Edge device gets details about any child devices assigned to it. また、IoT Edge デバイスにより、ローカル キャッシュが安全に更新されてオフライン操作が有効になり、利用統計情報メッセージのローカル ストレージの設定が取得されます。The IoT Edge device also securely updates its local cache to enable offline operations and retrieves settings for local storage of telemetry messages.

  3. オフラインにするGo offline

    IoT Hub から切断されている間、IoT Edge デバイス、そのデプロイ済みのモジュール、およびすべての子 IoT デバイスは無期限に動作できます。While disconnected from IoT Hub, the IoT Edge device, its deployed modules, and any children IoT devices can operate indefinitely. オフライン中にモジュールと子デバイスは、IoT Edge ハブによって認証することで起動と再起動を行うことができます。Modules and child devices can start and restart by authenticating with the IoT Edge hub while offline. IoT Hub にアップストリーム方向でバインドされている利用統計情報は、ローカルに格納されます。Telemetry bound upstream to IoT Hub is stored locally. ダイレクト メソッドまたはダイレクト メッセージによって、モジュール間または子 IoT デバイス間の通信が維持されます。Communication between modules or between child IoT devices is maintained through direct methods or messages.

  4. IoT Hub に再接続して再同期するReconnect and resync with IoT Hub

    IoT Hub との接続が復元されると、IoT Edge デバイスは再同期されます。Once the connection with IoT Hub is restored, the IoT Edge device syncs again. ローカルに保存されたメッセージは IoT Hub にすぐに配信されますが、接続速度、IoT Hub 待ち時間、および関連する要因に依存します。Locally stored messages are delivered to the IoT Hub right away, but are dependent on the speed of the connection, IoT Hub latency, and related factors. これらのメッセージは、格納された際と同じ順序で配信されます。They are delivered in the same order in which they were stored.

    モジュールおよびデバイスにおける、必要なプロパティと報告されたプロパティとの違いが調整されます。Any differences between the desired and reported properties of the modules and devices are reconciled. IoT Edge デバイスにより、割り当てられている一連の子 IoT デバイスへのすべての変更が更新されます。The IoT Edge device updates any changes to its set of assigned child IoT devices.

制約と制限Restrictions and limits

この記事で説明されている拡張オフライン機能は、IoT Edge バージョン 1.0.7 以上で利用できます。The extended offline capabilities described in this article are available in IoT Edge version 1.0.7 or higher. それより前のバージョンには、オフライン機能のサブセットが備わっています。Earlier versions have a subset of offline features. 拡張オフライン機能を備えていない既存の IoT Edge デバイスは、ランタイム バージョンを変更してアップグレードすることはできませんが、これらの機能を取得するために新しい IoT Edge デバイス ID を使用して再構成する必要があります。Existing IoT Edge devices that don't have extended offline capabilities can't be upgraded by changing the runtime version, but must be reconfigured with a new IoT Edge device identity to gain these features.

IoT Edge 以外のデバイスのみを子デバイスとして追加できます。Only non-IoT Edge devices can be added as child devices.

最初の 1 回限りの同期後、IoT Edge デバイスとそれに割り当てられている子デバイスは、無期限にオフラインで機能できます。ただし、メッセージのストレージは、有効期限 (TTL) 設定と、メッセージを格納するための空きディスク容量により異なります。IoT Edge devices and their assigned child devices can function indefinitely offline after the initial, one-time sync. However, storage of messages depends on the time to live (TTL) setting and the available disk space for storing the messages.

親デバイスと子デバイスを設定するSet up parent and child devices

IoT Edge デバイスによってその拡張オフライン機能を子 IoT デバイスまで拡張するには、2 つの手順を完了する必要があります。For an IoT Edge device to extend its extended offline capabilities to child IoT devices, you need to complete two steps. 最初に、Azure portal で親子関係を宣言します。First, declare the parent-child relationships in the Azure portal. 次に、親デバイスとすべての子デバイスの間に信頼関係を作成した後、device-to-cloud 通信をゲートウェイとして親を経由するように構成します。Second, create a trust relationship between the parent device and any child devices, then configure device-to-cloud communications to go through the parent as a gateway.

子のデバイスを割り当てるAssign child devices

子デバイスには、同じ IoT Hub に登録されている IoT Edge 以外の任意のデバイスを指定できます。Child devices can be any non-IoT Edge device registered to the same IoT Hub. 親デバイスには複数の子デバイスを設定できますが、子デバイスの親は 1 つだけ設定できます。Parent devices can have multiple child devices, but a child device only has one parent. エッジ デバイスに子デバイスを設定する方法には、Azure portal を使用する、Azure CLI を使用する、または IoT Hub サービス SDK を使用するという 3 つのオプションがあります。There are three options to set child devices to an edge device: through the Azure portal, using the Azure CLI, or using the IoT Hub service SDK.

次のセクションで、既存の IoT デバイスに対する IoT Hub での親/子の宣言方法の例を示します。The following sections provide examples of how you can declare the parent/child relationship in IoT Hub for existing IoT devices. 子デバイス用の新しい ID を作成する場合は、Azure IoT Hub へのダウンストリーム デバイスの認証に関する記事で詳細を確認してください。If you're creating new device identities for your child devices, see Authenticate a downstream device to Azure IoT Hub for more information.

オプション 1: IoT Hub ポータルOption 1: IoT Hub Portal

新しいデバイスを作成するときに、親子関係を宣言できます。You can declare the parent-child relationship when creating a new device. または、既存のデバイスに対して、親 IoT Edge デバイスまたは子 IoT デバイスのデバイスの詳細ページから関係を宣言できます。Or for existing devices, you can declare the relationship from the device details page of either the parent IoT Edge device or the child IoT device.

IoT Edge デバイスの詳細ページから子デバイスを管理する

オプション 2:az コマンドライン ツールを使用するOption 2: Use the az command-line tool

Azure コマンド ライン インターフェイスIoT 拡張機能 (v0.7.0 以降) を使用して、device-identity サブコマンドにより親子関係を管理できます。Using the Azure command-line interface with IoT extension (v0.7.0 or newer), you can manage parent child relationships with the device-identity subcommands. 次の例では、ハブ内の IoT Edge 以外のすべてデバイスを IoT Edge デバイスの子デバイスとして割り当てるクエリを使用しています。The example below uses a query to assign all non-IoT Edge devices in the hub to be child devices of an IoT Edge device.

# Set IoT Edge parent device
egde_device="edge-device1"

# Get All IoT Devices
device_list=$(az iot hub query \
        --hub-name replace-with-hub-name \
        --subscription replace-with-sub-name \
        --resource-group replace-with-rg-name \
        -q "SELECT * FROM devices WHERE capabilities.iotEdge = false" \
        --query 'join(`, `, [].deviceId)' -o tsv)

# Add all IoT devices to IoT Edge (as child)
az iot hub device-identity add-children \
  --device-id $egde_device \
  --child-list $device_list \
  --hub-name replace-with-hub-name \
  --resource-group replace-with-rg-name \
  --subscription replace-with-sub-name

クエリを変更して、デバイスのさまざまなサブセットを選択できます。You can modify the query to select a different subset of devices. 大量のデバイス セットを指定する場合、このコマンドは数秒かかる場合があります。The command may take several seconds if you specify a large set of devices.

オプション 3:IoT Hub サービス SDK を使用するOption 3: Use IoT Hub Service SDK

最後に、C#、Java、または Node.js の IoT Hub サービス SDK を使用してプログラムで親子関係を管理できます。Finally, you can manage parent child relationships programmatically using either C#, Java or Node.js IoT Hub Service SDK. ここに、C# SDK を使用した子デバイスの割り当て例をがあります。Here is an example of assigning a child device using the C# SDK.

親デバイスをゲートウェイとして設定するSet up the parent device as a gateway

親/子関係は、透過的なゲートウェイと考えることができます。子デバイスは IoT Hub 内に独自の ID を持っていますが、クラウドでの通信はその親経由で行われます。You can think of a parent/child relationship as a transparent gateway, where the child device has its own identity in IoT Hub but communicates through the cloud via its parent. セキュリティで保護された通信では、親デバイスが信頼できるソースに由来していることを子デバイスで検証できる必要があります。For secure communication, the child device needs to be able to verify that the parent device comes from a trusted source. そうしないと、サードパーティによって親を偽装する悪意のあるデバイスが設定され、通信が傍受される可能性があります。Otherwise, third-parties could set up malicious devices to impersonate parents and intercept communications.

この信頼関係を作成する 1 つの方法については、次の記事で詳しく説明されています。One way to create this trust relationship is described in detail in the following articles:

DNS サーバーの指定Specify DNS servers

堅牢性を向上させるため、環境内で使用する DNS サーバー アドレスを指定することをお勧めします。To improve robustness, it is highly recommended you specify the DNS server addresses used in your environment. DNS サーバーを IoT Edge に設定するには、トラブルシューティングの記事の「Edge エージェント モジュールで継続的に "空の構成ファイル" が報告され、デバイスでモジュールが開始しない」を参照してください。To set your DNS server for IoT Edge, see the resolution for Edge Agent module continually reports 'empty config file' and no modules start on device in the troubleshooting article.

オプションのオフライン設定Optional offline settings

デバイスがオフラインになった場合は、接続が再び確立されるまで、すべての device-to-cloud メッセージが IoT Edge 親デバイスに格納されます。If your devices go offline, the IoT Edge parent device stores all device-to-cloud messages until the connection is reestablished. オフライン メッセージの格納と転送は、IoT Edge ハブ モジュールによって管理されます。The IoT Edge hub module manages the storage and forwarding of offline messages. 長時間オフラインになる可能性があるデバイスでは、2 つの IoT Edge ハブ設定を構成することで、パフォーマンスを最適化します。For devices that may go offline for extended periods of time, optimize performance by configuring two IoT Edge hub settings.

最初に、デバイスが再接続されるまで IoT Edge ハブでメッセージが保持されるように、有効期限設定を大きくします。First, increase the time to live setting so that the IoT Edge hub will keep messages long enough for your device to reconnect. 次に、メッセージを格納するためのディスク領域をさらに追加します。Then, add additional disk space for message storage.

Time to LiveTime to live

有効期限設定は、有効期限が切れる前にメッセージが配信されるのを待機できる時間の量 (秒単位) です。The time to live setting is the amount of time (in seconds) that a message can wait to be delivered before it expires. 既定値は 7200 秒 (2 時間) です。The default is 7200 seconds (two hours). 最大値は、整数の変数の最大値 (約 20 億) によってのみ制限されます。The maximum value is only limited by the maximum value of an integer variable, which is around 2 billion.

この設定は、モジュール ツインに格納される、IoT Edge ハブの必須のプロパティです。This setting is a desired property of the IoT Edge hub, which is stored in the module twin. Azure portal で構成するか、デプロイ マニフェスト内に直接構成できます。You can configure it in the Azure portal or directly in the deployment manifest.

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

システム モジュール用のホスト ストレージHost storage for system modules

既定では、メッセージとモジュールの状態情報は、IoT Edge ハブのローカル コンテナー ファイルシステムに格納されます。Messages and module state information are stored in the IoT Edge hub's local container filesystem by default. 信頼性を向上させるために、特にオフラインで操作する場合は、専用のストレージをホスト IoT Edge デバイスに設定することもできます。For improved reliability, especially when operating offline, you can also dedicate storage on the host IoT Edge device. 詳細については、「Give modules access to a device's local storage」 (モジュールにデバイスのローカル ストレージへのアクセスを許可する) を参照してくださいFor more information, see Give modules access to a device's local storage

次のステップNext steps

親/子デバイス接続用の透過的なゲートウェイの設定方法の詳細を確認します。Learn more about how to set up a transparent gateway for your parent/child device connections: