本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
动态事物组
动态事物组是根据注册表中的特定搜索查询创建的。设备连接、设备影子创建和 AWS IoT Device Defender 违规数据等搜索查询参数支持此功能。动态事物组需要启用队列索引才能对设备的数据进行索引、搜索和聚合。在创建动态事物组之前,您可以使用队列索引搜索查询来预览动态事物组中的事物。有关更多信息,请参阅 机群索引 和 查询语法。
注意
动态事物组操作按注册表操作进行计量。有关更多信息,请参阅 AWS IoT Core
其它计量详细信息
动态事物组与静态事物组在以下方面不同:
-
请勿在事物组名称中使用个人身份信息。事物组名称可以出现在未加密的通信和报告中。
有关静态事物组的更多信息,请参阅静态事物组。
动态事物组的用例
您可以将动态事物组用于以下用例:
将动态事物组指定为任务的目标
通过创建以动态事物组为目标的连续作业,您可以在设备满足所需标准时自动将其定位为目标。标准可以是连接状态或存储在注册表或影子中的任何标准,例如软件版本或型号。如果某件事物未出现在动态事物组中,则它不会从该任务中接收任务文档。
例如,如果您的设备群需要固件更新以最大限度地降低更新过程中中断的风险,而您只想在电池续航时间大于 80% 的设备上更新固件。您可以创建一个名为 80 的动态事物组PercentBatteryLife ,该组仅包含电池续航时间超过 80% 的设备,并将其用作工作的目标。只有符合电池寿命标准的设备才能收到固件更新。当设备达到 80% 的电池续航时间标准时,它们会自动添加到动态事物组中,并将收到固件更新。
您可能还有多个设备型号,其固件或操作系统各不相同,因此需要不同版本的新软件更新。对于具有连续作业的动态组,这是最常见的用例,您可以在其中为每种设备型号、固件和操作系统组合创建一个动态组。然后,您可以为每个动态组设置连续作业,以便在设备根据定义的标准自动成为这些组成员时推送软件更新。
有关将事物组指定为任务目标的更多信息,请参阅CreateJob。
使用动态群组成员资格更改来执行所需的操作
每次将设备添加到动态事物组或从动态事物组中移除时,都会作为注册表事件更新的一部分向 MQTT 主题发送通知。您可以配置AWS IoT Core 规则,根据动态群组成员资格更新与 AWS 服务进行交互并采取所需的操作。示例操作包括写入 Amazon DynamoDB、调用 Lambda 函数或向亚马逊 SNS 发送通知。
将设备添加到动态事物组以进行自动违规检测
AWS IoT Device Defender 检测客户可以在动态事物组上定义安全配置文件。动态事物组中定义的安全配置文件会自动检测该组的设备是否存在违规行为。
在动态事物组上设置日志级别,以通过精细的日志记录来观察设备
您可以为动态事物组指定日志级别。如果您只想为满足特定条件的设备自定义日志级别和详细信息,则此功能非常有用。例如,如果您怀疑具有特定固件版本的设备在特定规则的已发布主题上导致错误,则可能需要设置详细的日志记录来调试这些问题。在这种情况下,您可以为所有具有此固件版本的设备创建一个动态组,我们假设该固件版本存储为注册表属性或设备影子中。然后,您可以设置调试级别,并将日志目标定义为该动态事物组。有关精细日志记录的更多信息,请参阅AWS IoT 使用日志进行 CloudWatch 监控。有关如何为特定事物组指定日志记录级别的更多信息,请参阅配置特定于资源的登录。 AWS IoT
创建动态事物组
使用 CreateDynamicThingGroup 命令创建动态事物组。要为 80 PercentBatteryLife 场景创建动态事物组,请使用 create-dynamic-thing-group CLI 命令:
$ aws iot create-dynamic-thing-group --thing-group-name "80PercentBatteryLife" --query-string "attributes.batterylife80"
注意
请勿在动态事物组名称中使用个人身份信息。
该CreateDynamicThingGroup命令返回响应。响应包含您的事物组的索引名称、查询字符串、查询版本、事物组名称、事物组 ID 和亚马逊资源名称 (ARN):
{ "indexName": "AWS_Things", "queryVersion": "2017-09-30", "thingGroupName": "80PercentBatteryLife", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/80PercentBatteryLife", "queryString": "attributes.batterylife80\n", "thingGroupId": "abcdefgh12345678ijklmnop12345678qrstuvwx" }
动态事物组的创建不会立刻发生。动态事物组回填需要一些时间才能完成。创建动态事物组时,该组的状态设置为BUILDING
。在回填完成后,状态变为 ACTIVE
。要检查动态事物组的状态,请使用DescribeThing组命令。
描述动态事物组
使用 DescribeThingGroup 命令获取有关动态事物组的信息:
$ aws iot describe-thing-group --thing-group-name "80PercentBatteryLife"
DescribeThingGroup 命令返回有关指定组的信息:
{ "status": "ACTIVE", "indexName": "AWS_Things", "thingGroupName": "80PercentBatteryLife", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/80PercentBatteryLife", "queryString": "attributes.batterylife80\n", "version": 1, "thingGroupMetadata": { "creationDate": 1548716921.289 }, "thingGroupProperties": {}, "queryVersion": "2017-09-30", "thingGroupId": "84dd9b5b-2b98-4c65-84e4-be0e1ecf4fd8" }
在动态事物组DescribeThingGroup上运行会返回特定于动态事物组的属性。返回属性的示例是查询字符串和状态。
动态事物组的状态可以采用以下值:
ACTIVE
-
动态事物组已准备就绪,可供使用。
BUILDING
-
正在创建动态事物组,并且正在处理事物成员资格。
REBUILDING
-
正在按照组的搜索查询的调整更新动态事物组的成员资格。
注意
创建动态事物组后,无论其状态如何,都要使用它。只有 ACTIVE
状态的动态事物组包括与该动态事物组的搜索查询匹配的所有事物。BUILDING
和 REBUILDING
状态的动态事物组可能未包括与搜索查询匹配的所有事物。
更新动态事物组
使用 UpdateDynamicThingGroup 命令更新动态事物组的属性,包括组的搜索查询。以下命令更新两个属性。一个是事物组描述,另一个是将成员资格标准更改为电池寿命 > 85 的查询字符串:
$ aws iot update-dynamic-thing-group --thing-group-name "80PercentBatteryLife" --thing-group-properties "thingGroupDescription=\"This thing group contains devices with a battery life greater than 85 percent.\"" --query-string "attributes.batterylife85"
UpdateDynamicThingGroup 命令返回一个响应,其中包含该组更新后的版本号:
{ "version": 2 }
动态事物组的更新不会立即发生。动态事物组回填需要一些时间才能完成。更新动态事物组时,群组的状态会更改为,REBUILDING
而群组会更新其成员资格。在回填完成后,状态变为 ACTIVE
。要检查动态事物组的状态,请使用DescribeThing组命令。
删除动态事物组
使用 DeleteDynamicThingGroup 命令删除动态事物组:
$ aws iot delete-dynamic-thing-group --thing-group-name "80PercentBatteryLife"
DeleteDynamicThingGroup 命令不会生成任何输出。
在更新云中的记录时,显示事物所属的组的命令(例如,ListGroupsForThing)可能会继续显示该组。
动态和静态事物组限制
动态事物组和静态事物组有以下限制:
动态事物组限制
动态事物组具有以下限制:
机群索引
启用队列索引服务后,您可以对设备群执行搜索查询。队列索引回填完成后,您可以创建和管理动态事物组。回填过程的完成时间直接受注册到的设备群规模的影响。 AWS Cloud在为动态事物组启用实例集索引服务后,您将无法禁用它,直到您删除所有动态事物组。
注意
如果您有权查询实例集索引,可以访问整个实例集的事物数据。
动态事物组的数量受到限制
动态事物组的数量是有限的。
成功的命令可能记录错误
创建或更新动态事物组时,有些事物可能符合包含在动态事物组中的条件,但它们并未添加到动态事物组中。这种情况将导致在记录错误和生成指标的同时成功执行创建或更新命令。AddThingToDynamicThingGroupsFailed一个指标可以代表多个日志条目。
发生以下情况时,将在 CloudWatch 日志中创建错误日志条目:
-
无法将符合条件的事物添加到动态事物组中。
-
将事物从动态事物组中移除,然后将其添加到另一个组。
当某件事有资格添加到动态事物组时,请考虑以下几点:
-
事物是否已经位于尽可能多的组中了? (请参阅限制)
-
否:该事物被添加到动态事物组中。
-
是:该事物是任何动态事物组的成员吗?
-
否:无法将该事物添加到动态事物组,记录错误,并生成 AddThingToDynamicThingGroupsFailed 指标。
-
是:要加入的动态事物组是否早于该事物已成为其成员的任何动态事物组?
-
否:无法将该事物添加到动态事物组,记录错误,并生成 AddThingToDynamicThingGroupsFailed 指标。
-
是:将事物从最新的动态事物组中移除,记录错误,然后将该事物添加到动态事物组中。这会生成一个错误,并针对从中删除该事物的动态事物组生成一个 AddThingToDynamicThingGroupsFailed 指标。
-
-
-
当动态事物组中的某件事不再符合搜索查询时,该事物将从动态事物组中移除。同样,当更新事物以满足动态事物组的搜索查询时,该事物就会如前所述,添加到该组中。这些添加和删除操作是正常的,不会产生错误记录条目。
在启用 overrideDynamicGroups
的情况下,静态组优先于动态组
一个事物可以属于的组数受到限制。当您使用AddThingToThing组或UpdateThingGroupsFor事物命令更新事物成员资格时,添加--overrideDynamicGroups
参数会使静态事物组优先于动态事物组。
向静态事物组添加事物时,请考虑以下几点:
-
事物是否已经属于最大数量的组?
-
否:该事物被添加到静态事物组中。
-
是:该事物是否在任何动态组中?
-
否:该事物无法添加到该事物组中。该命令引发异常。
-
是:是否已启用 --overrideDynamicGroups?
-
否:该事物无法添加到该事物组中。该命令引发异常。
-
是:从最近创建的动态事物组中删除该事物,记录错误,并针对从中删除该事物的动态事物组生成 AddThingToDynamicThingGroupsFailed 指标。然后,该事物被添加到静态事物组。
-
-
-
旧动态事物组优先于新动态事物组
一个事物可以属于的组数受到限制。当创建或更新操作为某事物创建了额外的组资格并且该事物已达到其组限制时,可能会从另一个动态事物组中移除以启用此添加。有关如何发生这种情况的更多信息,请参阅成功的命令可能记录错误和在启用 overrideDynamicGroups 的情况下,静态组优先于动态组了解示例。
从动态事物组中移除事物时,会记录错误并引发事件。
无法将策略应用于动态事物组
尝试将策略应用于动态事物组会生成异常。
动态事物组成员资格具有最终一致性
只为注册表评估事物的最终状态。如果状态快速更新,则可跳过中间状态。避免将规则或任务与其成员资格取决于中间状态的动态事物组相关联。