在中创建基于查询的群组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

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

    • ResourceTypeFilters

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

      • "AWS::AllSupported"— 指定结果可以包括与查询匹配且Resource Groups 服务当前支持的任何类型的资源。

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

    • TagFilters

      此元素指定键/值字符串对,将其与附加到资源的标签进行比较。那些具有与过滤器匹配的标签键和值的用户包含在群组中。每个过滤器都包含以下元素:

      • "Key"— 带有键名的字符串。只有具有匹配的键名称,这些资源才会与筛选条件相匹配并属于组。

      • "Values"— 带有以逗号分隔的指定键值列表的字符串。只有具有匹配的标签键和与该列表中的标签键匹配的资源才是组。

所有这些 JSON 元素都必须组合成 JSON 结构的单行字符串表示形式。例如,以Query具有以下示例 JSON 结构的 a 为例。此查询旨在仅匹配标签为 “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堆栈成员创建的资源不会成为该组的成员。例如,如果auto-scaling 组是Amazon CloudFormation作为堆栈的一部分创建的,则该auto-scaling 组该组的成员。但是,该auto-scaling 组在操作过程中创建的 Amazon EC2 实例不是Amazon CloudFormation基于堆栈的资源组的成员。

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

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

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

  • Type

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

    要创建Amazon CloudFormation基于堆栈的资源组,请指定值CLOUDFORMATION_STACK_1_0,如下所示:

    "Type": "CLOUDFORMATION_STACK_1_0"
  • Query

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

    • ResourceTypeFilters

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

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

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

    • StackIdentifier

      此元素指定要将Amazon CloudFormation资源名称 (ARN)。

所有这些 JSON 元素都必须组合成 JSON 结构的单行字符串表示形式。例如,以Query具有以下示例 JSON 结构的 a 为例。此查询旨在仅匹配属于指定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 开头。这些名称是预留的。Resource Name(资源组)必须唯一。

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

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

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

  8. 完成后,选择 Create(创组)。

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 开头。这些名称是预留的。Resource Name(资源组)必须唯一。

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

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

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

  8. 完成后,选择 Create(创组)。

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. 在对命令的响应中返回以下内容。

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

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