与组件中的阴影进行交互 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

与组件中的阴影进行交互

您可以开发自定义组件,包括 Lambda 函数组件,这些组件使用本地影子服务读取和修改本地影子文档以及对连接的设备执行本地状态管理。

使用自定义组件与本地影子服务交互Amazon IoT Greengrass中的核心 IPC 库Amazon IoT Device SDK. 这些区域有:阴影管理器组件在核心设备上启用本地影子服务。

要将影子管理器组件部署到 Greengrass 核心设备,创建部署这包括aws.greengrass.ShadowManager组件。

注意

默认情况下,部署影子管理器组件仅启用本地影子操作。启用Amazon IoT Greengrass将核心设备阴影或所连接设备的任何阴影的阴影状态信息同步到中的相应云影文档Amazon IoT Core,您必须为影子管理器组件创建配置更新,其中包括synchronize参数。有关更多信息,请参阅 将本地设备阴影同步Amazon IoT Core

检索和修改阴影状态

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

修改本地阴影状态

  1. 将访问控制策略添加到自定义组件的配方中,以允许组件接收有关本地影子主题的消息。例如,以下示例访问控制策略允许组件创建、更新和删除经典设备影子和命名影子myNamedShadow对于设备MyThingName.

    JSON
    { "accessControl": { "aws.greengrass.ShadowManager": { "com.example.MyShadowComponent:shadow:1": { "policyDescription": "Allows access to shadows", "operations": [ "aws.greengrass#GetThingShadow", "aws.greengrass#UpdateThingShadow", "aws.greengrass#DeleteThingShadow" ], "resources": [ "$aws/things/MyThingName/shadow", "$aws/things/MyThingName/shadow/name/myNamedShadow" ] } } } }
    YAML
    accessControl: aws.greengrass.ShadowManager: "com.example.MyShadowComponent:shadow:1": policyDescription: Allows access to shadows operations: - 'aws.greengrass#GetThingShadow' - 'aws.greengrass#UpdateThingShadow' - 'aws.greengrass#DeleteThingShadow' resources: - $aws/things/MyThingName/shadow - $aws/things/MyThingName/shadow/name/myNamedShadow
  2. 使用影子 IPC 操作检索和修改卷影状态信息。有关在组件代码中使用影子 IPC 操作的更多信息,请参阅与本地阴影互动.

对影子状态变化做出反应

Greengrass 组件使用本地发布/订阅界面在核心设备上进行通信。要使自定义组件能够对影子状态更改做出反应,您可以订阅本地发布/订阅主题。这允许组件接收有关本地影子主题的消息,然后对这些消息采取行动。

本地影子主题使用的格式与Amazon IoT设备影子 MQTT 主题。有关影子主题的更多信息,请参阅Device Shadow MQTT 主题中的Amazon IoT开发人员指南.

对局部阴影状态变化做出反应

  1. 将访问控制策略添加到自定义组件的配方中,以允许组件接收有关本地影子主题的消息。例如,以下示例访问控制策略允许自定义com.example.MyShadowReactiveComponent接收消息/update/delta经典设备影子和命名影子的主题myNamedShadow对于设备MyThingName.

    JSON
    { "accessControl": { "aws.greengrass.ipc.pubsub": { "com.example.MyShadowReactiveComponent:pubsub:1": { "policyDescription": "Allows access to shadow pubsub topics", "operations": [ "aws.greengrass#SubscribeToTopic" ], "resources": [ "$aws/things/MyThingName/shadow/update/delta", "$aws/things/MyThingName/shadow/name/myNamedShadow/update/delta" ] } } } }
    YAML
    accessControl: aws.greengrass.ipc.pubsub: "com.example.MyShadowReactiveComponent:pubsub:1": policyDescription: Allows access to shadow pubsub topics operations: - 'aws.greengrass#SubscribeToTopic' resources: - $aws/things/MyThingName/shadow/update/delta - $aws/things/MyThingName/shadow/name/myNamedShadow/update/delta
  2. 要在组件中启动自定义操作,请使用SubscribeToTopicIPC 操作,用于订阅您想要接收消息的影子主题。有关在组件代码中使用本地发布/订阅 IPC 操作的详细信息,请参阅发布/订阅本地消息.

  3. 要调用 Lambda 函数,请使用事件源配置提供影子主题的名称,并指定它是本地发布/订阅主题。有关创建 Lambda 函数组件的信息,请参阅运行Amazon Lambda功能.