AWS IoT
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

动态事物组

动态事物组通过搜索查询更新组成员资格。使用动态事物组,您可以更改与事物的交互方式,具体取决于其连接、注册表或影子数据。

由于动态事物组与机群索引相关联,您必须启用机群索引服务才能使用它们。您可以先预览动态事物组中的事物,然后再使用机群索引搜索查询创建该组。有关更多信息,请参阅队列索引服务队列索引服务:查询语法

您可以将动态事物组指定为作业的目标。只有满足定义动态事物组的条件的事物才能执行作业。

例如,假设您要更新设备上的固件,但为将更新中断的几率降至最低,您只希望更新电池电量大于 80% 的设备上的固件。您可以创建仅包括报告的电池电量大于 80% 的设备的动态事物组,并且可以使用该动态事物组作为固件更新作业的目标。只有满足您的电池电量条件的设备才能收到固件更新。在设备达到 80% 的电池电量条件后,它们会添加到动态事物组并接收固件更新。

有关将事物组指定为作业目标的更多信息,请参阅使用 AWS IoT Jobs API

动态事物组与静态事物组在以下方面不同:

  • 未显式定义事物成员资格。要创建动态事物组,您必须定义一个查询字符串,用于定义组成员资格。

  • 动态事物组无法成为层次结构的一部分。

  • 您使用一组不同的命令来创建、更新和删除动态事物组。对于所有其他操作,用于与静态事物组交互的相同命令可用于与动态事物组交互。

  • 单个账户最多可定义 100 个动态事物组。

有关静态事物组的更多信息,请参阅事物组

例如,假设我们要创建一个动态组,其中包含仓库中温度高于 60 华氏度的所有房间。当房间温度为 61 度或更高时,它将被添加到 RoomTooWarm 动态事物组。RoomTooWarm 动态事物组中的所有房间都会打开冷却风扇。当一个房间的温度降至 60 度或更低时,将从动态事物组中移除该房间,并且其风扇将关闭。

创建动态事物组

使用 CreateDynamicThingGroup 命令创建动态事物组。要为房间太热的场景创建动态事物组,您可以使用 create-dynamic-thing-group CLI 命令:

$ aws iot create-dynamic-thing-group --thing-group-name "RoomTooWarm" --query-string "attributes.temperature>60"

注意

我们建议不要在您的动态事物组名称中使用个人身份信息。

CreateDynamicThingGroup 命令返回包含索引名称、查询字符串、查询版本,事物组名称、事物组 ID 和事物组 ARN 的响应:

{ "indexName": "AWS_Things", "queryVersion": "2017-09-30", "thingGroupName": "RoomTooWarm", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RoomTooWarm", "queryString": "attributes.temperature>60\n", "thingGroupId": "abcdefgh12345678ijklmnop12345678qrstuvwx" }

动态事物组创建不是即时发生的。动态事物组回填需要一些时间才能完成。在创建动态事物组时,该组的状态设置为 BUILDING。在回填完成后,状态变为 ACTIVE。要查看动态事物组的状态,请使用 DescribeThingGroup 命令。

描述动态事物组

使用 DescribeThingGroup 命令获取有关动态事物组的信息:

$ aws iot describe-thing-group --thing-group-name "RoomTooWarm"

DescribeThingGroup 命令返回有关指定组的信息:

{ "status": "ACTIVE", "indexName": "AWS_Things", "thingGroupName": "RoomTooWarm", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RoomTooWarm", "queryString": "attributes.temperature>60\n", "version": 1, "thingGroupMetadata": { "creationDate": 1548716921.289 }, "thingGroupProperties": {}, "queryVersion": "2017-09-30", "thingGroupId": "84dd9b5b-2b98-4c65-84e4-be0e1ecf4fd8" }

在动态事物组上运行 DescribeThingGroup 返回特定于动态事物组的属性,如 queryString 和状态。

动态事物组的状态可以采用以下值:

ACTIVE

动态事物组已准备就绪,可供使用。

BUILDING

正在创建动态事物组,并且正在处理事物成员资格。

REBUILDING

正在按照组的搜索查询的调整更新动态事物组的成员资格。

注意

在创建动态事物组后,您可以使用该组,而不必考虑其状态。只有 ACTIVE 状态的动态事物组包括与该动态事物组的搜索查询匹配的所有事物。BUILDINGREBUILDING 状态的动态事物组可能未包括与搜索查询匹配的所有事物。

更新动态事物组

使用 UpdateDynamicThingGroup 命令更新动态事物组的属性,包括组的搜索查询。以下命令更新事物组描述和查询字符串,同时将成员资格条件更改为温度 > 65:

$ aws iot update-dynamic-thing-group --thing-group-name "RoomTooWarm" --thing-group-properties "thingGroupDescription=\"This thing group contains rooms warmer than 65F.\"" --query-string "attributes.temperature>65"

UpdateDynamicThingGroup 命令返回一个响应,其中包含该组更新后的版本号:

{ "version": 2 }

动态事物组更新不是即时发生的。动态事物组回填需要一些时间才能完成。在更新动态事物组时,该组的状态变为 REBUILDING,同时该组更新其成员资格。在回填完成后,状态变为 ACTIVE。要查看动态事物组的状态,请使用 DescribeThingGroup 命令。

删除动态事物组

使用 DeleteDynamicThingGroup 命令删除动态事物组:

$ aws iot delete-dynamic-thing-group --thing-group-name "RoomTooWarm"

DeleteDynamicThingGroup 命令不会生成任何输出。

在更新云中的记录时,显示事物所属的组的命令(例如,ListGroupsForThing)可能会继续显示该组。

限制和冲突

动态事物组与静态事物组共享一些相同限制:

  • 一个事物组最多可以具有 50 个属性。

  • 一个事物最多可以属于 10 个事物组。

  • 无法重命名事物组。

  • 事物组名称不能包含国际字符,如 û、é 和 ñ。

在使用动态事物组时,请记住以下内容。

旧动态事物组优先于新动态事物组

默认情况下,如果一个事物属于 10 个事物组,则无法将其添加到其他组。如果在您创建或更新动态事物组时动态事物组之间出现成员资格冲突,则旧动态事物组优先于新动态事物组。

在启用 overrideDynamicGroups 的情况下,静态组优先于动态组

默认情况下,如果一个事物属于 10 个事物组,则无法将该事物添加到其他组。如果您使用 AddThingToThingGroupUpdateThingGroupsForThing 命令更新事物成员资格,则可以使用 overrideDynamicGroups 标志使静态事物组优先于动态事物组。在启用 overrideDynamicGroups 的情况下,如果一个事物属于 10 个事物组,并且其中一个或多个组是动态的,则将该事物添加到静态事物组会导致从最新的动态事物组删除该事物。

例如,假设您创建了名为 DynamicGroup1 的动态事物组,然后创建了 9 个其他动态事物组,DynamicGroup10 是您创建的最后一个组。如果 Thing1 属于所有 10 个动态事物组,则手动将 Thing1 添加到启用了 OverrideDynamicGroups 的静态组会导致从 DynamicGroup10 删除该事物。

应用策略到动态事物组的成员

一个事物最多可以属于 10 个动态组。如果搜索查询字符串定义了动态事物组,其中包含已属于 10 个动态事物组的事物,则策略不会应用到该事物。

动态事物组成员资格具有最终一致性

只为注册表评估事物的最终状态。如果状态快速更新,则可跳过中间状态。避免将规则、作业、 与其成员资格依赖中间状态的动态事物组相关联。

必须已启用机群索引服务

必须已启用机群索引服务并且机群索引回填必须已完成,然后您才能创建并使用动态事物组。启用机群索引服务后,预计会有延迟。回填可能需要一些时间才能完成。您注册的事物越多,回填过程所需的时间就越长。在为动态事物组启用机群索引服务后,您将无法禁用它,直到您删除所有动态事物组。

注意

如果您有权查询机群索引,则可以访问整个机群的事物数据。