

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

# ローカルデバイスシャドウを と同期する AWS IoT Core
<a name="sync-shadows-with-iot-core"></a>

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

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

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

**Topics**
+ [前提条件](#shadow-sync-prereqs)
+ [シャドウマネージャーコンポーネントを設定する](#configure-shadow-manager-for-sync)
+ [ローカルシャドウを同期する](#sync-local-shadows)
+ [シャドウマージの競合動作](#shadow-merge-behavior)

## 前提条件
<a name="shadow-sync-prereqs"></a>

ローカルシャドウを と同期するには AWS IoT Core、以下のシャドウポリシーアクションを許可するように Greengrass AWS IoT Core コアデバイスの AWS IoT ポリシーを設定する必要があります。
+ `iot:GetThingShadow`
+ `iot:UpdateThingShadow`
+ `iot:DeleteThingShadow`

詳細については次を参照してください:
+ *AWS IoT デベロッパーガイド*の [AWS IoT Core ポリシーアクション](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-actions.html) 
+ [AWS IoT Greengrass V2 コアデバイスの最小 AWS IoT ポリシー](device-auth.md#greengrass-core-minimal-iot-policy)
+ [コアデバイスの AWS IoT ポリシーを更新する](device-auth.md#update-core-device-iot-policy)

## シャドウマネージャーコンポーネントを設定する
<a name="configure-shadow-manager-for-sync"></a>

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

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

**注記**  <a name="note-requirement-enable-shadow-manager-client-devices"></a>
コアデバイスがクライアントデバイスシャドウとやり取りできるようにするには、MQTT ブリッジコンポーネントを設定してデプロイする必要もあります。詳細については、「[Enable shadow manager to communicate with client devices](work-with-client-device-shadows.md)」(シャドウマネージャーがクライアントデバイスと通信できるようにする) を参照してください。

次の設定更新の例では、シャドウマネージャーコンポーネントに次のシャドウを同期するように指示します AWS IoT Core。
+ コアデバイスの古典的なシャドウ 
+ コアデバイスの名前付き `MyCoreShadow` 
+ `MyDevice2` という名前の IoT モノのクラシックなシャドウ 
+ `MyDevice1` という名前の IoT モノの名前付きシャドウ `MyShadowA` および `MyShadowB`

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

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

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

## ローカルシャドウを同期する
<a name="sync-local-shadows"></a>

Greengrass コアデバイスが AWS IoT クラウドに接続されている場合、シャドウマネージャーはコンポーネント設定で指定したシャドウに対して次のタスクを実行します。この動作は、指定するシャドウ同期方向設定オプションによって異なります。デフォルトでは、シャドウマネージャーは `betweenDeviceAndCloud` オプションを使用して、シャドウを両方向に同期させます。シャドウマネージャー v2.2.0 以降を使用している場合、シャドウを一方向 (`cloudToDevice` または `deviceToCloud`) にのみ同期するようにコアデバイスを設定できます。
+ シャドウ同期の方向設定が `betweenDeviceAndCloud` または `cloudToDevice` の場合、シャドウマネージャーは、 AWS IoT Coreのクラウドシャドウドキュメントから報告された状態情報を取得します。そして、ローカルに保存されたシャドウドキュメントを更新して、デバイスの状態を同期させます。
+ シャドウ同期の方向設定が `betweenDeviceAndCloud` または `deviceToCloud` の場合、シャドウマネージャーは、デバイスの現在の状態をクラウドシャドウドキュメントに公開します。

## シャドウマージの競合動作
<a name="shadow-merge-behavior"></a>

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

シャドウマネージャーがシャドウを同期すると、次の動作に従って変更がマージされます。
+ v2.2.0 より前のバージョンのシャドウマネージャーを使用している場合、またはシャドウ同期方向を `betweenDeviceAndCloud` に指定している場合、次の動作が適用されます。
  + シャドウの目的の状態でマージ競合が発生すると、シャドウマネージャーはローカルシャドウドキュメントの競合セクションを AWS IoT クラウドの値で上書きします。
  + シャドウが報告された状態でマージ競合がある場合、シャドウマネージャーは AWS IoT クラウド内のシャドウの競合セクションをローカルシャドウドキュメントの値で上書きします。
+ `deviceToCloud` シャドウ同期方向を指定すると、シャドウマネージャーは AWS IoT クラウド内のシャドウの競合するセクションをローカルシャドウドキュメントの値で上書きします。
+ `cloudToDevice` シャドウ同期方向を指定すると、シャドウマネージャーはローカルシャドウドキュメントの競合するセクションを AWS IoT クラウドの値で上書きします。