

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 同步本機裝置陰影 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 核心裝置的政策，以允許下列 AWS IoT Core 影子政策動作。
+ `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。

若要同步陰影狀態，[請建立包含 元件的部署](create-deployments.md)，並在部署中陰影管理員組態的`synchronize`組態參數中指定您要同步的陰影。 `aws.greengrass.ShadowManager`

**注意**  <a name="note-requirement-enable-shadow-manager-client-devices"></a>
若要讓核心裝置與用戶端裝置影子互動，您還必須設定和部署 MQTT 橋接器元件。如需詳細資訊，請參閱[啟用影子管理員以與用戶端裝置通訊](work-with-client-device-shadows.md)。

下列範例組態更新會指示影子管理員元件將下列影子與 同步 AWS IoT Core：
+ 核心裝置的傳統陰影 
+ `MyCoreShadow` 為核心裝置命名的 
+ 名為 之 IoT 物件的傳統影子 `MyDevice2` 
+ 名為 的影子`MyShadowA`和名為 `MyShadowB`的 IoT 物件 `MyDevice1`

此組態更新會指定 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`。如需詳細資訊，請參閱陰影管理員元件的[方向組態參數](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 雲端的值覆寫本機陰影文件的衝突區段。