Resource Groups 生命周期事件的结构和语法 - Amazon Resource Groups
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Resource Groups 生命周期事件的结构和语法

Amazon Resource Groups 的生命周期事件采用 JSON 对象字符串的形式,一般格式如下。

{ "version": "0", "id": "08f00e24-2e30-ec44-b824-8acddf1ac868", "detail-type": "ResourceGroups Group ... Change", "source": "aws.resource-groups", "account": "123456789012", "time": "2020-09-29T09:59:01Z", "region": "us-east-1", "resources": [ "arn:aws:resource-groups:us-east-1:123456789012:group/MyGroupName" ], "detail": { ... } }

有关所有亚马逊 EventBridge 事件通用字段的详细信息,请参阅亚马逊 EventBridge 用户指南中的亚马逊 EventBridge 事件。下表说明了特定于 Resource Groups 的详细信息。

字段名称 Type 描述
detail-type 字符串

对于 Resource Groups,detail-type 字段始终是以下值之一:

source 字符串 对于 Resource Groups,此值始终"aws.resource-groups"
resources Amazon 资源名称(ARN)的数组

此字段始终包含触发此事件的组的 Amazon 资源名称(ARN)

如果适用,此字段还可以包括添加到该组或从该组中移除的任何资源的 ARN。

detail

JSON 对象字符串 这是事件的有效负载。detail 字段的内容根据 detail-type 的值而变化。有关更多信息,请参见下一节。

detail 字段的结构

detail 字段包含有关特定更改的所有 Resource Groups 服务特定详细信息。根据上一节中描述的 detail 字段值,该 detail-type 字段可以采用两种形式之一,即组状态更改或成员资格更改。

重要

这些事件中的资源组由组的 ARN 和包含 UUID"unique-id" 字段组合来标识。通过将 UUID 作为资源组身份的一部分,您可以区分已删除的组和以后使用相同名称创建的不同组。我们建议您将 ARN 和唯一 ID 的串联视为程序中与这些事件交互的组的键。

组状态更改

"detail-type": "ResourceGroups Group State Change"

detail-type 值表示组本身的状态(包括其元数据)已更改。此更改发生在创建、更新或删除组时,如 detail 中的 "change" 字段所示。

指定此 detail-type 时,details 部分中包含的信息包括下表中描述的字段。

字段名称 Type 描述
event-sequence Double 一个单调递增的数字,用于指定特定组的事件顺序。当您删除该组并创建另一个同名的组时,该数字会重置。
group Group JSON 对象 按其 ARN、名称和唯一 ID 与事件关联的组对象。
state-change 字符串 发生的状态更改类型。可以是以下任何值:
old-state GroupState JSON 对象 更改前的组状态。该对象仅包含已更改的属性的值。

new-state

GroupState JSON 对象 更改后的组状态。该对象仅包含已更改的属性的值。

group JSON 对象包含下表中描述的元素。

字段名称 Type 描述
arn 字符串 组的 ARN。
name 字符串 组的友好名称。
unique-id GUID 唯一的 GUID 值,用于区分已删除的组和后来使用相同名称和 ARN 创建的另一个组。在代码中使用这些事件时,使用 ARN 和此值的串联作为该组的唯一键。

GroupState JSON 对象包含下表中描述的元素。

字段名称 Type 描述
description 字符串 资源组的客户提供描述。
resource-query ResourceQuery JSON 对象 定义组成员的查询的 JSON 表示形式。此字段仅适用于基于查询的组。此字段的语法由 ResourceQuery API 数据类型定义。创建更新事件示例中包含了这方面的示例。
group-configuration Configuration JSON 对象 与服务关联组关联的配置参数的 JSON 表示形式。有关更多信息,请参阅 Amazon Resource Groups API 参考中的保存资源组的配置

以下每个代码示例说明了每种 state-change 类型的 detail 字段内容。

创建

"state-change": "create"

该事件表示新组已创建。该事件包含组创建期间设置的所有组元数据属性。除非组为空,否则此事件之后通常会有一个或多个组成员资格事件。具有空值的属性不会显示在事件正文中。

以下示例事件表示名为 my-service-group 的新建资源组。在此示例中,该组使用一个基于标签查询,其仅匹配具有标签 "project"="my-service" 的 Amazon Elastic Compute Cloud(Amazon EC2)实例。

{ "version": "0", "id": "08f00e24-2e30-ec44-b824-8acddf1ac868", "detail-type": "ResourceGroups Group State Change", "source": "aws.resource-groups", "account": "123456789012", "time": "2020-09-29T09:59:01Z", "region": "us-east-1", "resources": [ "arn:aws:resource-groups:us-east-1:123456789012:group/my-service-group" ], "detail": { "event-sequence": 1.0, "state-change": "create", "group": { "arn": "arn:aws:resource-groups:us-east-1:123456789012:group/my-service-group", "name": "my-service-group", "unique-id": "3dd07ab7-3228-4410-8cdc-6c4a10fcceea" }, "new-state": { "resource-query": { "type": "TAG_FILTERS_1_0", "query": "{ \"ResourceTypeFilters\": [\"AWS::EC2::Instance\"], \"TagFilters\": [{\"Key\":\"project\", \"Values\":[\"my-service\"}] }" } } } }

更新

"state-change": "update"

该事件表示现有组已按某种方式修改。该事件仅包含从先前状态更改的属性。未更改的属性不会显示在事件正文中。

以下示例事件表明,上一个示例的资源组中基于标签的查询已被修改,将该组中的 Amazon EC2 卷资源也包括在内。

{ "version": "0", "id": "08f00e24-2e30-ec44-b824-8acddf1ac868", "detail-type": "ResourceGroups Group State Change", "source": "aws.resource-groups", "account": "123456789012", "time": "2020-09-29T09:59:01Z", "region": "us-east-1", "resources": [ "arn:aws:resource-groups:us-east-1:123456789012:group/my-service-group" ], "detail": { "event-sequence": 3.0, "state-change": "update", "group": { "arn": "arn:aws:resource-groups:us-east-1:123456789012:group/my-service-group", "name": "my-service", "unique-id": "3dd07ab7-3228-4410-8cdc-6c4a10fcceea" }, "new-state": { "resource-query": { "type": "TAG_FILTERS_1_0", "query": "{ \"ResourceTypeFilters\": [\"AWS::EC2::Instance\", \"AWS::EC2::Volume\"], \"TagFilters\": [{\"Key\":\"project\", \"Values\":[\"my-service\"}] }" } }, "old-state": { "resource-query": { "type": "TAG_FILTERS_1_0", "query": "{ \"ResourceTypeFilters\": [\"AWS::EC2::Instance\"], \"TagFilters\": [{\"Key\":\"Project\", \"Values\":[\"my-service\"}] }" } } } }

删除

"state-change": "delete"

该事件表示现有组已被删除。除了组标识外,详细信息字段不包含关于组的元数据。该 event-sequence 字段将在此事件之后重置,因为根据定义,它是此 arnunique-id 的最后一个事件。

{ "version": "0", "id": "08f00e24-2e30-ec44-b824-8acddf1ac868", "detail-type": "ResourceGroups Group State Change", "source": "aws.resource-groups", "account": "123456789012", "time": "2020-09-29T09:59:01Z", "region": "us-east-1", "resources": [ "arn:aws:resource-groups:us-east-1:123456789012:group/my-service" ], "detail": { "event-sequence": 4.0, "state-change": "delete", "group": { "arn": "arn:aws:resource-groups:us-east-1:123456789012:group/my-service", "name": "my-service", "unique-id": "3dd07ab7-3228-4410-8cdc-6c4a10fcceea" } } }

组成员资格更改

"detail-type": "ResourceGroups Group Membership Change"

detail-type 值表示该组的成员资格因向该组添加资源或从组中移除资源而更改。指定此 detail-type 后,顶级 resources 字段将包括成员资格已更改的组的 ARN 以及向该组中添加或移除的所有资源的 ARN。

指定此 detail-type 时,details 部分中包含的信息包括下表中描述的字段。

字段名称 Type 描述
event-sequence Double 一个单调递增的数字,表示特定组的事件顺序。当组被删除且其唯一 ID 更改时,该数字会重置。
group Group JSON 对象 通过 ARN、名称和唯一 ID 标识与事件关联的组对象。

resources

ResourceChange JSON 对象数组

组成员资格已更改的资源数组。

ResourceChange 对象包含每个资源的以下字段:

  • membership-change – 该值为 "add""remove"

  • arn – 添加或移除的资源的 ARN。

  • resource-type – 添加或移除的资源类型。

以下代码示例说明了典型成员资格更改类型的事件内容。此示例显示正在向组中添加一个资源,以及从该组中移除一个资源。

{ "version": "0", "id": "08f00e24-2e30-ec44-b824-8acddf1ac868", "detail-type": "ResourceGroups Group Membership Change", "source": "aws.resource-groups", "account": "123456789012", "time": "2020-09-29T09:59:01Z", "region": "us-east-1", "resources": [ "arn:aws:resource-groups:us-east-1:123456789012:group/my-service", "arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111", "arn:aws:ec2:us-east-1:123456789012:instance/i-efef2222" ], "detail": { "event-sequence": 2.0, "group": { "arn": "arn:aws:resource-groups:us-east-1:123456789012:group/my-service", "name": "my-service", "unique-id": "3dd07ab7-3228-4410-8cdc-6c4a10fcceea" }, "resources": [ { "membership-change": "add", "arn": "arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111", "resource-type": "AWS::EC2::Instance" }, { "membership-change": "remove", "arn": "arn:aws:ec2:us-east-1:123456789012:instance/i-efef2222", "resource-type": "AWS::EC2::Instance" } ] } }

不同用例的 EventBridge 自定义事件模式示例

以下示例 EventBridge 自定义事件模式会筛选由 Resource Groups 生成的事件,仅显示您对特定事件规则和目标感兴趣的事件。

在以下代码示例中,如果需要特定的组或资源,请用您自己的信息替换每个用户输入的占位符

所有 Resource Groups 事件
{ "source": [ "aws.resource-groups" ] }
组状态或成员资格更改事件

以下代码示例适用于所有组状态更改。

{ "source": [ "aws.resource-groups" ], "detail-type": [ "ResourceGroups Group State Change " ] }

以下代码示例适用于所有组成员资格更改。

{ "source": [ "aws.resource-groups" ], "detail-type": [ "ResourceGroups Group Membership Change" ] }
特定组的事件
{ "source": [ "aws.resource-groups" ], "detail": { "group": { "arn": [ "my-group-arn" ] } } }

前面的示例捕获了对指定组的更改。以下示例执行相同的操作,并且还会捕获该组是另一个组的成员资源时的更改。

{ "source": [ "aws.resource-groups" ], "resources": [ "my-group-arn" ] }
特定资源的事件

您只能筛选特定成员资源的组成员资格更改事件。

{ "source": [ "aws.resource-groups" ], "detail-type": [ "ResourceGroups Group Membership Change " ], "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-b188560f" ] }
特定资源类型的事件

您可以使用 ARN 的前缀匹配来匹配特定资源类型的事件。

{ "source": [ "aws.resource-groups" ], "resources": [ { "prefix": "arn:aws:ec2:us-east-1:123456789012:instance" } ] }

或者,您可以通过使用 resource-type 标识符来使用精确匹配,从而可以简洁地匹配多个类型。与前面的示例不同,以下示例仅匹配组成员资格更改事件,因为组状态更改事件的 detail 字段中不包含字段 resources

{ "source": [ "aws.resource-groups" ], "detail": { "resources": { "resource-type": [ "AWS::EC2::Instance", "AWS::EC2::Volume" ] } } }
所有资源移除事件
{ "source": [ "aws.resource-groups" ], "detail-type": [ "ResourceGroups Group Membership Change" ], "detail": { "resources": { "membership-change": [ "remove" ] } } }
特定资源的所有资源移除事件
{ "source": [ "aws.resource-groups" ], "detail-type": [ "ResourceGroups Group Membership Change" ], "detail": { "resources": { "membership-change": [ "remove" ], "arn": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-b188560f" ] } } }

您不能使用本节第一个示例中使用的顶级 resources 数组进行此类事件筛选。这是因为顶级 resources 元素中的资源可能是添加到组中的资源,并且该事件仍然会匹配。换句话说,以下代码示例可能会返回意外事件。相反,请使用上一个示例中显示的语法。

{ "source": [ "aws.resource-groups" ], "detail-type": [ "ResourceGroups Group Membership Change" ], "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-b188560f" ], "detail": { "resources": { "membership-change": [ "remove" ] } } }