

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

# 在组件中与影子交互
<a name="interact-with-shadows-in-components"></a>

您可以开发自定义组件（包括 Lambda 函数组件），使用本地影子服务读取和修改本地影子文档和客户端设备影子文档。

自定义组件使用 AWS IoT Device SDK 或组件 SDK 中的 AWS IoT Greengrass 核心 IPC 库与本地影子服务进行 AWS IoT Greengrass 交互。[影子管理器](shadow-manager-component.md)组件在核心设备上支持本地影子服务。

要将影子管理器组件部署到 Greengrass 核心设备，请[创建包含 `aws.greengrass.ShadowManager` 组件的部署](create-deployments.md)。

**注意**  
默认情况下，部署影子管理器组件仅支持本地影子操作。 AWS IoT Greengrass 要启用将核心设备阴影的阴影状态信息或客户端设备的任何阴影状态信息同步到中相应的云影文档 AWS IoT Core，必须为包含`synchronize`参数的影子管理器组件创建配置更新。有关更多信息，请参阅 [将本地设备阴影与同步 AWS IoT Core](sync-shadows-with-iot-core.md)。

**Topics**
+ [检索和修改影子状态](#interact-shadow-states)
+ [应对影子状态更改](#react-shadow-events)

## 检索和修改影子状态
<a name="interact-shadow-states"></a>

影子 IPC 操作会检索和更新本地影子文档中的状态信息。影子管理器组件负责处理核心设备上这些影子文档的存储。

**修改本地影子状态**

1. 在自定义组件的配方中添加授权策略，以允许组件接收有关本地影子主题的消息。

   有关授权策略示例，请参阅[本地影子 IPC 授权策略示例](ipc-local-shadows.md#ipc-local-shadow-authorization-policy-examples)。

1. 使用影子 IPC 操作来检索和修改影子状态信息。有关在组件代码中使用影子 IPC 操作的更多信息，请参阅[与本地影子交互](ipc-local-shadows.md)。

**注意**  <a name="note-requirement-enable-shadow-manager-client-devices"></a>
要使核心设备能够与客户端设备影子交互，您还必须配置和部署 MQTT 网桥组件。有关更多信息，请参阅[启用影子管理器以与客户端设备通信](work-with-client-device-shadows.md)。

## 应对影子状态更改
<a name="react-shadow-events"></a>

Greengrass 组件使用 publish/subscribe 本地接口在核心设备上进行通信。要使自定义组件能够对影子状态变化做出反应，您可以订阅本地 publish/subscribe 主题。这样允许组件接收有关本地影子主题的消息，然后处理这些消息。

本地影子主题使用与 AWS IoT 设备影子 MQTT 主题相同的格式。有关更多信息，请参阅《AWS IoT 开发人员指南》中的[设备影子 MQTT 主题](https://docs.aws.amazon.com/iot/latest/developerguide/device-shadow-mqtt.html)。**

**应对本地影子状态更改**

1. 在自定义组件的配方中添加访问控制策略，以允许组件接收有关本地影子主题的消息。

   有关授权策略示例，请参阅[本地影子 IPC 授权策略示例](ipc-local-shadows.md#ipc-local-shadow-authorization-policy-examples)。

1. 要在组件中启动自定义操作，请使用 `SubscribeToTopic` IPC 操作订阅要接收的消息所关于的影子主题。有关在组件代码中使用本地 publish/subscribe IPC 操作的更多信息，请参阅[发布/订阅本地消息](ipc-publish-subscribe.md)。

1. 要调用 Lambda 函数，请使用事件源配置提供影子主题的名称并指定它是本地 publish/subscribe 主题。有关创建 Lambda 函数组件的更多信息，请参阅[运行 AWS Lambda 函数](run-lambda-functions.md)。

**注意**  <a name="note-requirement-enable-shadow-manager-client-devices"></a>
要使核心设备能够与客户端设备影子交互，您还必须配置和部署 MQTT 网桥组件。有关更多信息，请参阅[启用影子管理器以与客户端设备通信](work-with-client-device-shadows.md)。