ローカルデバイスシャドウを AWS IoT Core と同期する - AWS IoT Greengrass

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ローカルデバイスシャドウを AWS IoT Core と同期する

シャドウマネージャーコンポーネントにより、AWS IoT Greengrass はローカルデバイスシャドウ状態を AWS IoT Core と同期できるようになります。シャドウマネージャーコンポーネントの設定を変更して、synchronization 設定パラメータを含め、デバイスの AWS IoT のモノの名前と、同期するシャドウを指定する必要があります。

シャドウを同期するようにシャドウマネージャーを設定すると、ローカルシャドウドキュメントとクラウドシャドウドキュメントのどちらで変更が発生するかに関係なく、指定したシャドウのすべての状態変更が同期されます。

また、シャドウマネージャーコンポーネントがシャドウをリアルタイムで同期するか、定期的な間隔で同期するかを指定することもできます。デフォルトでは、シャドウマネージャーコンポーネントはリアルタイムでシャドウを同期するため、コアデバイスは更新が発生するたびに AWS IoT Core との間でシャドウの更新を送受信します。定期的な間隔を設定して、帯域幅の使用量と料金を削減できます。

前提条件

ローカルシャドウを AWS IoT Core と同期させるには、Greengrass コアデバイスの AWS IoT ポリシーを、次の AWS IoT Core シャドウポリシーアクションを許可するように設定する必要があります。

  • iot:GetThingShadow

  • iot:UpdateThingShadow

  • iot:DeleteThingShadow

詳細については、次を参照してください。

シャドウマネージャーコンポーネントを設定する

シャドウマネージャーでは、ローカルシャドウドキュメントのシャドウ状態情報を AWS IoT Core のクラウドシャドウドキュメントに同期するには、シャドウ名のマッピングのリストが必要です。

シャドウの状態を同期するには、aws.greengrass.ShadowManager コンポーネントを含むデプロイを作成し、デプロイのシャドウマネージャー設定の synchronize 設定パラメータで同期するシャドウを指定します。

注記

コアデバイスがクライアントデバイスシャドウとやり取りできるようにするには、MQTT ブリッジコンポーネントを設定してデプロイする必要もあります。詳細については、「Enable shadow manager to communicate with client devices」(シャドウマネージャーがクライアントデバイスと通信できるようにする) を参照してください。

次の設定更新例では、シャドウマネージャーコンポーネントに次のシャドウを AWS IoT Core と同期するように指示します。

  • コアデバイスの古典的なシャドウ

  • コアデバイスの名前付き MyCoreShadow

  • MyDevice2 という名前の IoT モノのクラシックなシャドウ

  • MyDevice1 という名前の IoT モノの名前付きシャドウ MyShadowA および MyShadowB

この設定更新では、シャドウを AWS IoT Core とリアルタイムで同期するように指定されています。シャドウマネージャー v2.1.0 以降を使用している場合、定期的な間隔でシャドウを同期させるようにシャドウマネージャーコンポーネントを設定できます。この機能を設定するには、同期ストラテジーを periodic に変更し、間隔の delay を秒単位で指定します。詳細については、「シャドウマネージャーコンポーネント」の「ストラテジー設定パラメータ」を参照してください。

この設定更新では、AWS IoT Core とコアデバイスの間の両方向でシャドウが同期するように指定されています。シャドウマネージャー v2.2.0 以降を使用している場合、シャドウを一方向にのみ同期するようにシャドウマネージャーコンポーネントを設定できます。この機能を設定するには、同期 directiondeviceToCloud または cloudToDevice に変更します。詳細については、シャドウマネージャーコンポーネントの direction 設定パラメータを参照してください。

{ "strategy": { "type": "realTime" }, "synchronize": { "coreThing": { "classic": true, "namedShadows": [ "MyCoreShadow" ] }, "shadowDocuments": [ { "thingName": "MyDevice1", "classic": false, "namedShadows": [ "MyShadowA", "MyShadowB" ] }, { "thingName": "MyDevice2", "classic": true, "namedShadows": [ ] } ], "direction": "betweenDeviceAndCloud" } }

ローカルシャドウを同期する

Greengrass コアデバイスが AWS IoT クラウドに接続されている場合、シャドウマネージャーは、コンポーネント設定で指定したシャドウに対して次のタスクを実行します。この動作は、指定するシャドウ同期方向設定オプションによって異なります。デフォルトでは、シャドウマネージャーは betweenDeviceAndCloud オプションを使用して、シャドウを両方向に同期させます。シャドウマネージャー v2.2.0 以降を使用している場合、シャドウを一方向 (cloudToDevice または deviceToCloud) にのみ同期するようにコアデバイスを設定できます。

  • シャドウ同期の方向設定が betweenDeviceAndCloud または cloudToDevice の場合、シャドウマネージャーは、AWS IoT Core のクラウドシャドウドキュメントから報告された状態情報を取得します。そして、ローカルに保存されたシャドウドキュメントを更新して、デバイスの状態を同期させます。

  • シャドウ同期の方向設定が betweenDeviceAndCloud または deviceToCloud の場合、シャドウマネージャーは、デバイスの現在の状態をクラウドシャドウドキュメントに公開します。

シャドウマージの競合動作

コアデバイスがインターネットから切断されている場合など、場合によっては、シャドウマネージャーが変更を同期する前に、ローカルシャドウサービスと AWS IoT クラウドでシャドウが変更されることがあります。その結果、希望する状態と報告される状態が、ローカルシャドウサービスと AWS IoT クラウドで異なります

シャドウマネージャーがシャドウを同期すると、次の動作に従って変更がマージされます。

  • v2.2.0 より前のバージョンのシャドウマネージャーを使用している場合、またはシャドウ同期方向を betweenDeviceAndCloud に指定している場合、次の動作が適用されます。

    • シャドウの希望する状態でマージの競合が発生すると、シャドウマネージャーはローカルシャドウドキュメントの競合するセクションを AWS IoT クラウドからの値で上書きします。

    • シャドウの報告された状態でマージ競合が発生すると、シャドウマネージャーは、AWS IoT クラウドのシャドウの競合するセクションを、ローカルシャドウドキュメントからの値で上書きします。

  • シャドウ同期方向に deviceToCloud を指定すると、シャドウマネージャーは、AWS IoT クラウド内のシャドウの競合するセクションをローカルシャドウドキュメントからの値で上書きします。

  • シャドウ同期方向に cloudToDevice を指定すると、シャドウマネージャーは、ローカルシャドウドキュメントの競合するセクションを AWS IoT クラウドからの値で上書きします。