在 Amazon Resource Groups 中创建基于查询的组 - Amazon Resource Groups
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

在 Amazon Resource Groups 中创建基于查询的组

资源组查询的类型

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

基于标签

基于标签的查询包含使用以下格式 AWS::service::resource 和标签指定的资源类型列表。标签 是帮助识别组织中的资源以及对其进行排序的键。(可选)标签包含键的值。

对于基于标签的查询,您还可以指定要作为组成员的资源共享的标签。例如,如果要创建的资源组具有用于运行应用程序测试阶段的所有 Amazon EC2 实例和 Amazon S3 存储桶,并且您具有以这种方式标记的实例和存储桶,请从下拉列表中选择 AWS::EC2::InstanceAWS::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" – 带有键名称的字符串。仅限其标签具有匹配键名称的资源与筛选条件匹配,并且是该组的成员。

      • "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\"]}]}"}'
基于 Amazon CloudFormation 堆栈

在基于 Amazon CloudFormation 堆栈的查询中,您可以在您的账户的当前区域中选择一个 Amazon CloudFormation 堆栈,然后在该堆栈中选择要包含在组中的资源类型。您只能将查询基于一个 Amazon CloudFormation 堆栈。

注意

一个 Amazon CloudFormation 堆栈可以包含其他 Amazon CloudFormation“子”堆栈。但是,基于“父”堆栈的资源组并不能将子堆栈的所有资源都作为组成员获取。资源组将子堆栈作为单个组成员添加到父堆栈的资源组中,并且不会对其进行扩展。

Resource Groups 支持具有以下状态之一的基于 Amazon CloudFormation 堆栈的查询。

  • CREATE_COMPLETE

  • CREATE_IN_PROGRESS

  • DELETE_FAILED

  • DELETE_IN_PROGRESS

  • REVIEW_IN_PROGRESS

重要

只有在查询中作为堆栈一部分直接创建的资源才会包含在资源组中。以后由 Amazon CloudFormation 堆栈成员创建的资源不会成为该组的成员。例如,如果由 Amazon CloudFormation 创建的自动扩展组作为堆栈的一部分,则该自动扩展组该组的成员。但是,由该自动扩展组作为其操作一部分创建的 Amazon EC2 实例不是基于 Amazon CloudFormation 堆栈的资源组的成员。

如果创建一个基于 Amazon CloudFormation 堆栈的组,并且该堆栈变为不再支持作为组查询基础的状态(如 DELETE_COMPLETE),该资源组仍然存在,但它没有成员资源。

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

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

  • Type

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

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

    "Type": "CLOUDFORMATION_STACK_1_0"
  • Query

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

    • ResourceTypeFilters

      此元素将结果限制为仅匹配筛选条件的资源类型。可以指定以下值:

      • "AWS::AllSupported" – 指定结果可以包括与查询匹配的任何类型的资源。

      • "AWS::service-id::resource-type – 以逗号分隔的资源类型规范字符串列表,其格式为:,例如 "AWS::EC2::Instance"

    • StackIdentifier

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

所有这些 JSON 元素都必须组合成 JSON 结构的单行字符串表示形式。例如,考虑具有以下示例 JSON 结构的 Query。此查询旨在仅匹配属于指定 Amazon 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\"}'

构建基于标签的查询和创建组

以下过程说明了如何构建基于标签的查询和使用此查询创建资源组。

Console
  1. 登录到 Amazon Resource Groups 控制台

  2. 在导航窗格中,选择创建资源组

  3. 创建基于查询的组页面上的组类型下,选择基于标签组类型。

  4. 分组条件下,选择要包含在资源组中的资源类型。您最多可以在查询中包含 20 种资源类型。对于本演练,请选择 AWS::EC2::InstanceAWS::S3::Bucket

  5. 仍在分组条件下,为标签指定标签键或标签键和值对,将匹配的资源限制为仅包含用指定值标记的资源。在完成您的标签时,请选择 Add (添加) 或按 Enter。在该示例中,筛选具有 Stage 标签键的资源。标签值是可选的,但会进一步缩小查询的结果。您可以通过在标签值之间添加 OR 运算符来为标签键添加多个值。要添加更多标签,请选择添加。查询将 AND 运算符分配给标签,以便与指定的资源类型和所有指定标签匹配的任何资源都将由查询返回。

  6. 仍然在分组条件下,选择之前的组资源以返回您的账户中与指定标签键匹配的 EC2 实例和 S3 存储桶列表。

  7. 获得所需的结果后,根据此查询创建一个组。

    1. 组详细信息下, 对于组名称,为您的资源组键入一个名称。

      资源组名称最多可以包含 128 个字符,包括字母、数字、连字符、句点和下划线。名称不能以 AWSaws 开头。这些名称是预留的。资源组名称在您账户的当前区域中必须是唯一的。

    2. (可选)在组描述中,输入您的组的描述。

    3. (可选)在组标签中,添加仅适用于资源组(而不适用于组中的成员资源)的标签键和值对。

      如果计划将此组作为较大组的成员,则组标签非常有用。由于需要指定至少一个标签键以创建组,因此,请务必将组标签中的至少一个标签键添加到打算嵌套到更大组的组中。

  8. 在完成后,选择创建组

Amazon CLI & Amazon SDKs

基于标签的组基于 TAG_FILTERS_1_0 类型的查询。

  1. 在 Amazon CLI 会话中,键入以下内容,然后按 Enter,以将组名称、描述、资源类型、标签键和标签值替换为您自己的值。描述最多可以包含 512 个字符,包括字母、数字、连字符、下划线、标点符号和空格。您最多可以在查询中包含 20 种资源类型。资源组名称最多可以包含 128 个字符,包括字母、数字、连字符、句点和下划线。名称不能以 AWSaws 开头。这些名称是预留的。资源组名称在您的账户中必须是唯一的。

    需要使用至少一个 ResourceTypeFilters 值。要指定所有资源类型,请将 AWS::AllSupported 作为 ResourceTypeFilters 值。

    $ aws resource-groups create-group \ --name resource-group-name \ --resource-query '{"Type":"TAG_FILTERS_1_0","Query":"{\"ResourceTypeFilters\":[\"resource_type1\",\"resource_type2\"],\"TagFilters\":[{\"Key\":\"Key1\",\"Values\":[\"Value1\",\"Value2\"]},{\"Key\":\"Key2\",\"Values\":[\"Value1\",\"Value2\"]}]}"}'

    以下命令是一个示例。

    $ aws resource-groups create-group \ --name my-resource-group \ --resource-query '{"Type":"TAG_FILTERS_1_0","Query":"{\"ResourceTypeFilters\":[\"AWS::EC2::Instance\"],\"TagFilters\":[{\"Key\":\"Stage\",\"Values\":[\"Test\"]}]}"}'

    以下命令是一个示例,其中包含所有支持的资源类型。

    $ aws resource-groups create-group \ --name my-resource-group \ --resource-query '{"Type":"TAG_FILTERS_1_0","Query":"{\"ResourceTypeFilters\":[\"AWS::AllSupported\"],\"TagFilters\":[{\"Key\":\"Stage\",\"Values\":[\"Test\"]}]}"}'
  2. 在对命令的响应中返回以下内容。

    • 您创建的组的完整描述。

    • 您用于创建组的资源查询。

    • 与组关联的标签。

创建基于 Amazon CloudFormation 堆栈的组

以下过程说明了如何构建基于堆栈的查询和使用此查询创建资源组。

Console
  1. 登录到 Amazon Resource Groups 控制台

  2. 在导航窗格中,选择创建资源组

  3. 创建基于查询的组上的组类型下,选择基于 CloudFormation 堆栈组类型。

  4. 选择要作为组基础的堆栈。只能将资源组基于一个堆栈。要筛选堆栈列表,请开始键入堆栈的名称。仅在列表中显示具有支持的状态的堆栈。

  5. 在堆栈中选择要包含在组中的资源类型。对于本演练,请保留默认值所有受支持的资源类型。有关可以包含在组中的受支持资源类型的更多信息,请参阅适用于 Amazon Resource Groups 和标签编辑器的资源类型

  6. 选择查看组资源以返回 Amazon CloudFormation 堆栈中与选定资源类型匹配的资源列表。

  7. 获得所需的结果后,根据此查询创建一个组。

    1. 组详细信息下, 对于组名称,为您的资源组键入一个名称。

      资源组名称最多可以包含 128 个字符,包括字母、数字、连字符、句点和下划线。名称不能以 AWSaws 开头。这些名称是预留的。资源组名称在您账户的当前区域中必须是唯一的。

    2. (可选)在组描述中,输入您的组的描述。

    3. (可选)在组标签中,添加仅适用于资源组(而不适用于组中的成员资源)的标签键和值对。

      如果计划将此组作为较大组的成员,则组标签非常有用。由于需要指定至少一个标签键以创建组,因此,请务必将组标签中的至少一个标签键添加到打算嵌套到更大组的组中。

  8. 在完成后,选择创建组

Amazon CLI & Amazon SDKs

基于 Amazon CloudFormation 堆栈的组基于 CLOUDFORMATION_STACK_1_0 类型的查询。

  1. 运行以下命令,将组名称、描述、堆栈标识符和资源类型的值替换为您自己的值。描述最多可以包含 512 个字符,包括字母、数字、连字符、下划线、标点符号和空格。

    如果未指定资源类型,则 Resource Groups 包含堆栈中的所有支持的资源类型。您最多可以在查询中包含 20 种资源类型。资源组名称最多可以包含 128 个字符,包括字母、数字、连字符、句点和下划线。名称不能以 AWSaws 开头。这些名称是预留的。资源组名称在您的账户中必须是唯一的。

    stack_identifier 是堆栈 ARN,如示例命令中所示。

    $ aws resource-groups create-group \ --name group_name \ --description "description" \ --resource-query '{"Type":"CLOUDFORMATION_STACK_1_0","Query":"{\"StackIdentifier\":\"stack_identifier\",\"ResourceTypeFilters\":[\"resource_type1\",\"resource_type2\"]}"}'

    以下命令是一个示例。

    $ aws resource-groups create-group \ --name My-CFN-stack-group \ --description "My first CloudFormation stack-based group" \ --resource-query '{"Type":"CLOUDFORMATION_STACK_1_0","Query":"{\"StackIdentifier\":\"arn:aws:cloudformation:us-west-2:123456789012:stack\/AWStestuseraccount\/fb0d5000-aba8-00e8-aa9e-50d5cEXAMPLE\",\"ResourceTypeFilters\":[\"AWS::EC2::Instance\",\"AWS::S3::Bucket\"]}"}'
  2. 在对命令的响应中返回以下内容。

    • 您创建的组的完整描述。

    • 您用于创建组的资源查询。