

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

# 在中创建基于查询的群组 AWS Resource Groups
<a name="gettingstarted-query"></a>

## 资源组查询的类型
<a name="getting_started-query_types"></a>

在中 AWS Resource Groups，*查询*是基于查询的组的基础。您可以将资源组基于两种类型的查询之一。

 **基于标签**   
基于标签的查询包含使用以下格式 `AWS::service::resource` 和标签指定的资源类型列表。*标签* 是帮助识别组织中的资源以及对其进行排序的键。（可选）标签包含键的值。  
对于基于标签的查询，您还可以指定要作为组成员的资源共享的标签。例如，如果要创建的资源组具有用于运行应用程序测试阶段的所有 Amazon EC2 实例和 Amazon S3 存储桶，并且您具有以这种方式标记的实例和存储桶，请从下拉列表中选择 `AWS::EC2::Instance` 和 `AWS::S3::Bucket` 资源类型，然后指定标签键 **Stage** 和标签值 **Test**。  
基于标签的资源组的 `ResourceQuery` 参数语法包含以下元素：  
+  `Type` 

  此元素表示哪种查询定义此资源组。要创建基于标签的资源组，请按如下方式指定值 `TAG_FILTERS_1_0`：

  ```
  "Type": "TAG_FILTERS_1_0"
  ```
+  `Query` 

   此元素定义用于匹配资源的实际查询。它包含具有以下元素的 JSON 结构的字符串表示：
  +  `ResourceTypeFilters` 

    此元素将结果限制为仅匹配筛选条件的资源类型。可以指定以下值：
    + `"AWS::AllSupported"` – 指定结果可以包括与查询匹配且当前由 Resource Groups 服务支持的任意类型资源。
    + `"AWS::service-id::resource-type` – 以逗号分隔的资源类型规范字符串列表，其格式为：，例如 `"AWS::EC2::Instance"`。
  +  `TagFilters` 

    此元素指定与附加到您的资源的标签进行比较的 key/value 字符串对。标签键和值与筛选条件相匹配的内容将包含在组中。每个筛选条件都由以下元素组成：
    + `"Key"` – 带有键名称的字符串。仅限其标签具有匹配键名称的资源与筛选条件匹配，并且是该组的成员。
    + `"Values"` – 一个字符串，其中包含以逗号分隔的指定键值列表。仅限具有匹配标签键和值（与此列表中的一个元素匹配）是该组的成员。
所有这些 JSON 元素都必须组合成 JSON 结构的单行字符串表示形式。例如，考虑具有以下示例 JSON 结构的 `Query`。此查询仅匹配标签为“Stage”且值为“Test”的 Amazon EC2 实例。  

```
{
    "ResourceTypeFilters": [ "AWS::EC2::Instance" ],
    "TagFilters": [
        {
            "Key": "Stage",
            "Values": [ "Test" ]
        }
    ]
}
```
该 JSON 可以表示为以下单行字符串，并用作 `Query` 元素的值。由于 JSON 结构的值必须是双引号字符串，因此必须对任何嵌入的双引号字符或正斜杠字符进行转义，方法是在每个字符前面加上反斜杠，如下所示：  

```
"Query":"{\"ResourceTypeFilters\":[\"AWS::AllSupported\"],\"TagFilters\":[{\"Key\":\"Stage\",\"Values\":[\"Test\"]}]}"
```
然后将完整的 `ResourceQuery` 字符串表示为 CLI 命令参数，如下所示：  

```
--resource-query '{"Type":"TAG_FILTERS_1_0","Query":"{\"ResourceTypeFilters\":[\"AWS::AllSupported\"],\"TagFilters\":[{\"Key\":\"Stage\",\"Values\":[\"Test\"]}]}"}'
```

  **基于CloudFormation 堆栈**   
在 CloudFormation 基于堆 CloudFormation 栈的查询中，您在当前区域的账户中选择一个堆栈，然后在堆栈中选择要加入该组的资源类型。您只能基于一个 CloudFormation 堆栈进行查询。  
一个 CloudFormation 堆栈可以包含其他 CloudFormation “子” 堆栈。但是，基于“父”堆栈的资源组并不能将子堆栈的所有资源都作为组成员获取。资源组将子堆栈作为单个组成员添加到父堆栈的资源组中，并且不会对其进行扩展。
Resource Groups 支持基于具有以下状态之一的 CloudFormation 堆栈的查询。  
+ `CREATE_COMPLETE`
+ `CREATE_IN_PROGRESS`
+ `DELETE_FAILED`
+ `DELETE_IN_PROGRESS`
+ `REVIEW_IN_PROGRESS`
只有在查询中作为堆栈一部分直接创建的资源才会包含在资源组中。以后由 CloudFormation 堆栈成员创建的资源不会成为该组的成员。例如，如果由创建的自动缩放组 CloudFormation 作为堆栈的一部分，则该自动缩放组***就是***该组的成员。但是，由该自动扩展组作为其操作一部分创建的 Amazon EC2 实例***不是基于*** CloudFormation 堆栈的资源组的成员。
如果您基于 CloudFormation 堆栈创建群组，并且该堆栈的状态更改为不再支持作为群组查询基础的群组（例如）`DELETE_COMPLETE`，则该资源组仍然存在，但它没有成员资源。

在创建资源组后，您可以在该组中的资源上执行任务。

 CloudFormation 基于堆栈的资源组的`ResourceQuery`参数语法包含以下元素：
+  `Type` 

  此元素表示哪种查询定义此资源组。

  要创建 CloudFormation 基于堆栈的资源组，请按如下方式指定值`CLOUDFORMATION_STACK_1_0`：

  ```
  "Type": "CLOUDFORMATION_STACK_1_0"
  ```
+  `Query` 

   此元素定义用于匹配资源的实际查询。它包含具有以下元素的 JSON 结构的字符串表示：
  +  `ResourceTypeFilters` 

    此元素将结果限制为仅匹配筛选条件的资源类型。可以指定以下值：
    + `"AWS::AllSupported"` – 指定结果可以包括与查询匹配的任何类型的资源。
    + `"AWS::service-id::resource-type` – 以逗号分隔的资源类型规范字符串列表，其格式为：，例如 `"AWS::EC2::Instance"`。
  +  `StackIdentifier` 

    此元素指定要将其资源包含在组中的 CloudFormation 堆栈的 Amazon 资源名称（ARN）。

所有这些 JSON 元素都必须组合成 JSON 结构的单行字符串表示形式。例如，考虑具有以下示例 JSON 结构的 `Query`。此查询旨在仅匹配属于指定 CloudFormation 堆栈的 Amazon S3 存储桶。

```
{
    "ResourceTypeFilters": [ "AWS::S3::Bucket" ],
    "StackIdentifier": "arn:aws:cloudformation:us-west-2:123456789012:stack/MyCloudFormationStackName/fb0d5000-aba8-00e8-aa9e-50d5cEXAMPLE"
}
```

该 JSON 可以表示为以下单行字符串，并用作 `Query` 元素的值。由于 JSON 结构的值必须是双引号字符串，因此必须对任何嵌入的双引号字符或正斜杠字符进行转义，方法是在每个字符前面加上反斜杠，如下所示：

```
"Query":"{\"ResourceTypeFilters\":[\"AWS::S3::Bucket\"],\"StackIdentifier\":\"arn:aws:cloudformation:us-west-2:123456789012:stack\/MyCloudFormationStackName\/fb0d5000-aba8-00e8-aa9e-50d5cEXAMPLE\"
```

然后将完整的 `ResourceQuery` 字符串表示为 CLI 命令参数，如下所示：

```
--resource-query '{"Type":"CLOUDFORMATION_STACK_1_0","Query":"{\"ResourceTypeFilters\":[\"AWS::S3::Bucket\"],\"StackIdentifier\":\"arn:aws:cloudformation:us-west-2:123456789012:stack\/MyCloudFormationStackName\/fb0d5000-aba8-00e8-aa9e-50d5cEXAMPLE\"}'
```