

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 将本地设备阴影与同步 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 Core 《*AWS IoT 开发者指南*》中的@@ [策略操作](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 网桥组件。有关更多信息，请参阅[启用影子管理器以与客户端设备通信](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`。有关更多信息，请参阅影子管理器组件的[方向配置参数](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 云的值覆盖本地卷影文档中冲突的部分。