

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

# Resource Groups 生命周期事件的结构和语法
<a name="monitor-groups-syntax"></a>

**Topics**
+ [`detail` 字段的结构](monitor-groups-syntax-detail.md)
+ [不同用例的 EventBridge 自定义事件模式示例](monitor-groups-example-eventbridge-filters.md)

的生命周期事件 AWS Resource Groups 采用 [JSON](https://json.org) 对象字符串的形式，一般格式如下。

```
{
    "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 *事件](https://docs.aws.amazon.com//eventbridge/latest/userguide/aws-events.html)。下表说明了特定于 Resource Groups 的详细信息。


| 字段名称 | Type | 说明 | 
| --- | --- | --- | 
| detail-type | 字符串 |  对于 Resource Groups，`detail-type` 字段始终是以下值之一： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ARG/latest/userguide/monitor-groups-syntax.html)  | 
| source | 字符串 | 对于 Resource Groups，此值始终为 "aws.resource-groups"。 | 
| resources | 一组 Amazon 资源名称 (ARNs) |  此字段始终包含触发此事件的组的 [Amazon 资源名称（ARN）](https://docs.aws.amazon.com//general/latest/gr/aws-arns-and-namespaces.html)。 如果适用，此字段还可以包括添加到该 ARNs 组或从该组中移除的所有资源。  | 
|  `detail`  | JSON 对象字符串 | 这是事件的有效负载。detail 字段的内容根据 detail-type 的值而变化。[有关更多信息，请参见下一节。](monitor-groups-syntax-detail.md) | 

# `detail` 字段的结构
<a name="monitor-groups-syntax-detail"></a>

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

**重要**  
这些事件中的资源组由组的 ARN 和包含 [UUID](https://wikipedia.org/wiki/Universally_unique_identifier) 的 `"unique-id"` 字段组合来标识。通过将 UUID 作为资源组身份的一部分，您可以区分已删除的组和以后使用相同名称创建的不同组。我们建议您将 ARN 和唯一 ID 的串联视为程序中与这些事件交互的组的键。

## 组状态更改
<a name="monitor-groups-syntax-detail-state-change"></a>

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

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

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


| 字段名称 | Type | 说明 | 
| --- | --- | --- | 
| event-sequence | 双精度 | 一个单调递增的数字，用于指定特定组的事件顺序。当您删除该组并创建另一个同名的组时，该数字会重置。 | 
| group | [`Group`](#monitor-groups-syntax-detail-group-object) JSON 对象 | 按其 ARN、名称和唯一 ID 与事件关联的组对象。 | 
| state-change | 字符串 | 发生的状态更改类型。可以是以下任何值：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ARG/latest/userguide/monitor-groups-syntax-detail.html) | 
| 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 数据类型](https://docs.aws.amazon.com//organizations/latest/APIReference/API_ResourceQuery.html)定义。[创建](#monitor-groups-syntax-detail-state-change-create)和[更新](#monitor-groups-syntax-detail-state-change-update)事件示例中包含了这方面的示例。 | 
| group-configuration | Configuration JSON 对象 | 与服务关联组关联的配置参数的 JSON 表示形式。有关更多信息，请参阅 AWS Resource Groups API 参考中的[保存资源组的配置](https://docs.aws.amazon.com/ARG/latest/APIReference/about-slg.html)。 | 

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

### Create
<a name="monitor-groups-syntax-detail-state-change-create"></a>

`"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\"}]
                }"
            }
        }
    }
}
```

### 更新
<a name="monitor-groups-syntax-detail-state-change-update"></a>

`"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\"}]
                }"
            }
        }
    }
}
```

### 删除
<a name="monitor-groups-syntax-detail-state-change-delete"></a>

`"state-change": "delete"`

该事件表示现有组已被删除。除了组标识外，详细信息字段不包含关于组的元数据。该 `event-sequence` 字段将在此事件之后重置，因为根据定义，它是此 `arn` 和 `unique-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"
        }
    }
}
```

## 组成员资格更改
<a name="monitor-groups-syntax-detail-membership-change"></a>

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

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

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


| 字段名称 | Type | 说明 | 
| --- | --- | --- | 
| event-sequence | 双精度 | 一个单调递增的数字，表示特定组的事件顺序。当组被删除且其唯一 ID 更改时，该数字会重置。 | 
| group | Group JSON 对象 | 通过 ARN、名称和唯一 ID 标识与事件关联的组对象。 | 
|  `resources`  | ResourceChange JSON 对象数组 |  组成员资格已更改的资源数组。 此 `ResourceChange` 对象包含每个资源的以下字段： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ARG/latest/userguide/monitor-groups-syntax-detail.html)  | 

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

```
{
    "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 自定义事件模式示例
<a name="monitor-groups-example-eventbridge-filters"></a>

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

在以下代码示例中，如果需要特定的组或资源，请将每个*user input placeholder*组或资源替换为您自己的信息。

所有 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" ]
}
```

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

```
{
    "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" ]
         }
     }
}
```