IaC ジェネレーターを使用してスキャンされたリソースから CloudFormation テンプレートを作成する - AWS CloudFormation

IaC ジェネレーターを使用してスキャンされたリソースから CloudFormation テンプレートを作成する

このトピックでは、IaC ジェネレーター機能を使用してスキャンされたリソースからテンプレートを作成する方法について説明します。

スキャンしたリソースからテンプレートを作成する (コンソール)

スキャンしたリソースからスタックテンプレートを作成するには
  1. CloudFormation コンソールの IaC ジェネレーターページを開きます。

  2. 画面上部のナビゲーションバーで、スキャンしたリソースが含まれる AWS リージョンを選択します。

  3. [テンプレート] セクションから [テンプレートを作成] を選択します。

  4. [新しいテンプレートから開始] を選択します。

    1. [テンプレート名] に、テンプレートの名前を入力します。

    2. (オプション) [削除ポリシー][置換ポリシーを更新] に設定します。

    3. [次へ] をクリックし、スキャンしたリソースをテンプレートに追加します。

  5. [スキャンしたリソースを追加] で、スキャンしたリソースのリストを参照し、テンプレートに追加するリソースを選択します。リソースは、リソース識別子、リソースタイプ、タグのいずれかでフィルターできます。フィルターは相互に包括的です。

  6. 必要なリソースすべてをテンプレートに追加したときに、[次へ] を選択し、[スキャンしたリソースを追加] ページを閉じて [関連リソースを追加] ページに進みます。

  7. 関連リソースの推奨リストを確認します。Amazon EC2 インスタンスやセキュリティグループなどの関連リソースは、相互に依存しており、通常は同じワークロードに属しています。生成されたテンプレートに含める関連リソースを選択します。

    注記

    このテンプレートには、関連リソースをすべて追加することが推奨されます。

  8. テンプレートの詳細、スキャンしたリソース、関連リソースを確認します。

  9. [テンプレートを作成] をクリックし、[確認して作成] ページを閉じてテンプレートを作成します。

スキャンしたリソースからテンプレートを作成する (AWS CLI)

スキャンしたリソースからスタックテンプレートを作成するには
  1. スキャン中に見つかったリソースを一覧表示するには、list-resource-scan-resources コマンドを使用し、オプションで出力を制限する --resource-identifier オプションを指定します。--resource-scan-id オプションでは、サンプル ARN を実際の ARN に置き換えます。

    aws cloudformation list-resource-scan-resources \ --resource-scan-id arn:aws:cloudformation:us-east-1:123456789012:resourceScan/0a699f15-489c-43ca-a3ef-3e6ecfa5da60 \ --resource-identifier MyApp

    以下はレスポンスの例です。ManagedByStack は CloudFormation がリソースを既に管理しているかどうかを示します。出力をコピーします。これは次のステップで必要になります。

    { "Resources": [ { "ResourceType": "AWS::EKS::Cluster", "ResourceIdentifier": { "ClusterName": "MyAppClusterName" }, "ManagedByStack": false }, { "ResourceType": "AWS::AutoScaling::AutoScalingGroup", "ResourceIdentifier": { "AutoScalingGroupName": "MyAppASGName" }, "ManagedByStack": false } ] }

    出力の各フィールドについては、「AWS CloudFormation API リファレンス」の「ScannedResource」を参照してください。

  2. cat コマンドを使用して、リソースタイプと識別子をホームディレクトリの resources.json という名前の JSON ファイルに保存します。前のステップの出力例に基づいた JSON の例を次に示します。

    $ cat > resources.json [ { "ResourceType": "AWS::EKS::Cluster", "ResourceIdentifier": { "ClusterName": "MyAppClusterName" } }, { "ResourceType": "AWS::AutoScaling::AutoScalingGroup", "ResourceIdentifier": { "AutoScalingGroupName": "MyAppASGName" } } ]
  3. 作成した resources.json ファイルとともに list-resource-scan-related-resources コマンドを使用して、スキャンしたリソースに関連するリソースを一覧表示します。

    aws cloudformation list-resource-scan-related-resources \ --resource-scan-id arn:aws:cloudformation:us-east-1:123456789012:resourceScan/0a699f15-489c-43ca-a3ef-3e6ecfa5da60 \ --resources file://resources.json

    以下はレスポンスの例です。ManagedByStack は CloudFormation がリソースを既に管理しているかどうかを示します。これらのリソースを、前のステップで作成した JSON ファイルに追加します。テンプレートを作成するには、これが必要です。

    { "RelatedResources": [ { "ResourceType": "AWS::EKS::Nodegroup", "ResourceIdentifier": { "NodegroupName": "MyAppNodegroupName" }, "ManagedByStack": false }, { "ResourceType": "AWS::IAM::Role", "ResourceIdentifier": { "RoleId": "arn:aws::iam::account-id:role/MyAppIAMRole" }, "ManagedByStack": false } ] }

    出力の各フィールドについては、「AWS CloudFormation API リファレンス」の「ScannedResource」を参照してください。

    注記

    リソースの入力リストの長さは 100 を超えることはできません。100 を超えるリソースの関連リソースを一覧表示するには、100 のバッチで list-resource-scan-related-resources を実行した後、結果を統合します。

    一覧に、重複したリソースが出力される場合があるため注意が必要です。

  4. これらの変更とともに、次のように create-generated-template コマンドを使用して新しいスタックテンプレートを作成します。

    • us-east-1 を、スキャンされたリソースが含まれる AWS リージョンに置き換えます。

    • MyTemplate を、作成するテンプレートの名前に置き換えます。

    aws cloudformation create-generated-template --region us-east-1 \ --generated-template-name MyTemplate \ --resources file://resources.json

    次は、resources.json ファイルの例です。

    [ { "ResourceType": "AWS::EKS::Cluster", "LogicalResourceId":"MyCluster", "ResourceIdentifier": { "ClusterName": "MyAppClusterName" } }, { "ResourceType": "AWS::AutoScaling::AutoScalingGroup", "LogicalResourceId":"MyASG", "ResourceIdentifier": { "AutoScalingGroupName": "MyAppASGName" } }, { "ResourceType": "AWS::EKS::Nodegroup", "LogicalResourceId":"MyNodegroup", "ResourceIdentifier": { "NodegroupName": "MyAppNodegroupName" } }, { "ResourceType": "AWS::IAM::Role", "LogicalResourceId":"MyRole", "ResourceIdentifier": { "RoleId": "arn:aws::iam::account-id:role/MyAppIAMRole" } } ]

    成功すると、このコマンドは以下を返します。

    { "Arn": "arn:aws:cloudformation:region:account-id:generatedtemplate/7fc8512c-d8cb-4e02-b266-d39c48344e48", "Name": "MyTemplate" }