AWS Resource Groups でのクエリベースのグループの作成 - AWS Resource Groups

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Resource Groups でのクエリベースのグループの作成

リソースグループクエリのタイプ

AWS Resource Groups で、クエリは、クエリベースグループの基盤です。リソースグループは、2 つのタイプのクエリのいずれかに基づくことができます。

タグベース

タグベースのクエリには、AWS::service::resource 形式で指定されているリソースタイプのリスト、およびタグが含まれます。タグは、企業内のリソースを識別およびソートするのに役立ちます。タグには、キーの値が含まれます。

タグベースのクエリの場合、グループのメンバーにするリソースによって共有されるタグも指定します。例えば、アプリケーションのテストステージを実行するために使用している Amazon EC2 インスタンスと Amazon S3 バケットをすべて含むリソースグループを作成しており、このようにタグ付けされたインスタンスとバケットがある場合は、ドロップダウンリストからリソースタイプ AWS::EC2::Instance および AWS::S3::Bucket を選択してから、タグ値 Test でタグキー Stage を指定します。

タグベースのリソースグループの 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 構造の 1 行の文字列表現に結合する必要があります。例えば、次の 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\"]}]}"}'
AWS CloudFormationスタックベース

AWS CloudFormation スタックベースのクエリでは、現在のリージョン内の自分のアカウントで AWS CloudFormation スタックを選択し、グループ内に含めるスタックでリソースタイプを選択ます。クエリは 1 つの AWS CloudFormation スタックだけに基づくことができます。

注記

AWS CloudFormation スタックには他の AWS CloudFormation「子」スタックを含めることができます。ただし、「親」スタックに基づくリソースグループは、子スタックのすべてのリソースをグループメンバーとして取得するわけではありません。リソースグループは、子スタックを親スタックのリソースグループに単一のグループメンバーとして追加し、拡張はしません。

Resource Groups は、次のいずれかのステータスを持つ AWS CloudFormation スタックに基づくクエリをサポートします。

  • CREATE_COMPLETE

  • CREATE_IN_PROGRESS

  • DELETE_FAILED

  • DELETE_IN_PROGRESS

  • REVIEW_IN_PROGRESS

重要

クエリでスタックの一部として直接作成されたリソースのみが、リソースグループに含まれます。AWS CloudFormation スタックのメンバーによって後で作成されるリソースは、グループのメンバーになりません。例えば、auto-scaling グループがスタックの一部として AWS CloudFormation によって作成される場合、その auto-scaling グループはグループのメンバーになります。しかし、その auto-scaling グループによってオペレーションの一部として作成された Amazon EC2 インスタンスは、AWS CloudFormation スタックベースのリソースグループのメンバーにはなりません

AWS CloudFormation スタックに基づいてグループを作成し、スタックのステータスが、DELETE_COMPLETE など、グループクエリの基準としてはサポートされなくなったステータスに変化する場合、リソースグループは引き続き存在しますが、メンバーリソースはなくなります。

リソースグループを作成したら、グループのリソースに対してタスクを実行できます。

CloudFormation スタックベースのリソースグループの ResourceQuery パラメータの構文には、次の要素が含まれます。

  • Type

    この要素は、このリソースグループを定義するクエリの種類を示します。

    AWS CloudFormation スタックベースのリソースグループを作成するには、値 CLOUDFORMATION_STACK_1_0 を次のように指定します。

    "Type": "CLOUDFORMATION_STACK_1_0"
  • Query

    この要素は、リソースとの照合に使用される実際のクエリを定義します。これには、次の要素を持つ JSON 構造の文字列表現が含まれます。

    • ResourceTypeFilters

      この要素は、フィルターに一致するリソースタイプにのみ結果を制限します。次の値を指定できます。

      • "AWS::AllSupported" - クエリに一致する任意のタイプのリソースを結果に含めることができることを指定します。

      • "AWS::service-id::resource-type - この形式のリソースタイプの指定文字列をカンマで区切ったリスト ("AWS::EC2::Instance" など)。

    • StackIdentifier

      この要素は、リソースをグループに含める AWS CloudFormation スタックの Amazon リソースネーム (ARN) を指定します。

これらの JSON 要素はすべて、JSON 構造の 1 行の文字列表現に結合する必要があります。例えば、次の JSON 構造例を持つ Query について考えます。このクエリは、指定された AWS 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. AWS Resource Groups コンソールにサインインします。

  2. ナビゲーションペインで、[Create Resource Group] (リソースグループの作成) を選択します。

  3. [クエリベースのグループの作成] ページの [グループタイプ] で、[タグベース] グループタイプを選択します。

  4. [Grouping criteria] (グループ分けの条件) ページで、リソースグループに必要なリソースタイプを選択します。1 つのクエリに最大 20 のリソースタイプを設定できます。このウォークスルーでは、[AWS::EC2::Instance] および [AWS::S3::Bucket] を選択します。

  5. まだ [Grouping criteria] (グループ分けの条件) ページで、[Tags] (タグ) に、タグキーまたはタグのキーと値のペアを指定して、指定された値でタグ付けされたもののみを含めるように一致するリソースを制限します。タグ付けが完了したら、[追加] を選択するか、Enter キーを押します。この例では、[ステージ] のタグキーを含むリソースをフィルタリングします。タグ値はオプションですが、クエリの結果を絞り込むことができます。タグ値の間に OR 演算子を追加して、タグキーに複数の値を追加することができます。さらにタグを追加するには、[追加] を選択します。クエリは AND 演算子をタグに割り当てます。そのため、クエリによって、指定されたリソースタイプおよび指定されたすべてのタグと一致するすべてのリソースが返ります。

  6. さらに [Grouping criteria] (グループ分けの条件) ページで、[Preview group resources] (リソースグループのプレビュー) を選択すると、指定されたタグキーまたはキーに一致する、アカウント内の EC2 インスタンスおよび S3 バケットのリストが返されます。

  7. 必要な結果が得られたら、このクエリに基づいてグループを作成します。

    1. [Group details] (グループの詳細) で、[Group name] (グループ名) に、リソースグループの名前を入力します。

      リソースグループ名は、文字、数字、ハイフン、ピリオド、アンダースコアを含む最大 128 文字で構成されます。名前の先頭を AWS または aws にすることはできません。これらは予約されています。リソースグループ名は、アカウントの現在のリージョンで一意である必要があります。

    2. (オプション) [グループの説明] に、グループの説明を入力します。

    3. (オプション) [グループタグ] で、リソースグループにのみ適用するタグキーと値のペアを追加します。グループのメンバーリソースは追加しません。

      グループタグは、このグループを大規模なグループのメンバーにする場合に便利です。グループを作成するには少なくとも 1 つのタグキーを指定する必要があるため、[Group tags (グループタグ)] にタグキーを追加して、大規模なグループにネストする予定のグループにタグキーを 1 つ以上追加してください。

  8. 完了したら、[Create group] (グループの作成) を選択します。

AWS CLI & AWS SDKs

タグベースのグループは、タイプ TAG_FILTERS_1_0 のクエリに基づいています。

  1. AWS CLI セッションで、次のように入力し、Enter キーを押します。これにより、グループ名の値、説明、リソースタイプ、タグキー、タグ値は独自に設定した内容に置き換えられます。説明には、文字、数字、ハイフン、アンダースコア、句読点、空白文字を含め、最大で 512 文字使用できます。1 つのクエリに最大 20 のリソースタイプを設定できます。リソースグループ名は、文字、数字、ハイフン、ピリオド、アンダースコアを含む最大 128 文字で構成されます。名前の先頭を AWS または aws にすることはできません。これらは予約されています。リソースグループ名は、アカウントで一意である必要があります。

    ResourceTypeFilters に少なくとも 1 つの値が必要です。すべてのリソースタイプを指定するには、ResourceTypeFilters 値として AWS::AllSupported を使用します。

    $ 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. このコマンドのレスポンスで返る内容は次のとおりです。

    • 作成したグループの詳細な説明。

    • グループの作成に使用したリソースクエリ。

    • グループに関連付けられているタグ。

AWS CloudFormation スタックベースのグループを作成する

以下の手順では、スタックベースのクエリを作成し、それを使用してリソースグループを作成する方法を示しています。

Console
  1. AWS Resource Groups コンソールにサインインします。

  2. ナビゲーションペインで、[Create Resource Group] (リソースグループの作成) を選択します。

  3. [クエリベースのグループの作成][グループタイプ] で、[CloudFormation スタックベース] グループタイプを選択します。

  4. グループの基盤にするスタックを選択します。リソースグループは、1 つのスタックにのみ基づくことができます。スタックのリストをフィルタリングするには、スタックの名前の入力を開始します。サポートされているステータスのスタックのみがリストに表示されます。

  5. グループに含めるスタックでリソースタイプを選択します。この演習では、デフォルトの [All supported resource types (サポートされているすべてのリソースタイプ)] のままにしておきます。サポートされていて、グループに含めることができるリソースタイプの詳細については、「AWS Resource Groups およびタグエディタで使用できるリソースタイプ」を参照してください。

  6. [View group resources] (グループリソースの表示) を選択すると、選択したリソースタイプに一致する、AWS CloudFormation スタック内のリソースのリストが返されます。

  7. 必要な結果が得られたら、このクエリに基づいてグループを作成します。

    1. [Group details] (グループの詳細) で、[Group name] (グループ名) に、リソースグループの名前を入力します。

      リソースグループ名は、文字、数字、ハイフン、ピリオド、アンダースコアを含む最大 128 文字で構成されます。名前の先頭を AWS または aws にすることはできません。これらは予約されています。リソースグループ名は、アカウントの現在のリージョンで一意である必要があります。

    2. (オプション) [グループの説明] に、グループの説明を入力します。

    3. (オプション) [グループタグ] で、リソースグループにのみ適用するタグキーと値のペアを追加します。グループのメンバーリソースは追加しません。

      グループタグは、このグループを大規模なグループのメンバーにする場合に便利です。グループを作成するには少なくとも 1 つのタグキーを指定する必要があるため、[Group tags (グループタグ)] にタグキーを追加して、大規模なグループにネストする予定のグループにタグキーを 1 つ以上追加してください。

  8. 完了したら、[Create group] (グループの作成) を選択します。

AWS CLI & AWS SDKs

AWS CloudFormation スタックベースのグループは、タイプ CLOUDFORMATION_STACK_1_0 のクエリに基づいています。

  1. グループ名の値、説明、スタック識別子、リソースタイプを独自に設定した内容に置き換えて、次のコマンドを実行します。説明には、文字、数字、ハイフン、アンダースコア、句読点、空白文字を含め、最大で 512 文字使用できます。

    リソースタイプを指定しない場合、Resource Groups にはスタックでサポートされるすべてのリソースタイプが含まれます。1 つのクエリに最大 20 のリソースタイプを設定できます。リソースグループ名は、文字、数字、ハイフン、ピリオド、アンダースコアを含む最大 128 文字で構成されます。名前の先頭を AWS または aws にすることはできません。これらは予約されています。リソースグループ名は、アカウントで一意である必要があります。

    コマンド例に示すように、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. このコマンドのレスポンスで返る内容は次のとおりです。

    • 作成したグループの詳細な説明。

    • グループの作成に使用したリソースクエリ。