IaC ジェネレーターを使用してスキャンされたリソースから CloudFormation テンプレートを作成する
このトピックでは、IaC ジェネレーター機能を使用してスキャンされたリソースからテンプレートを作成する方法について説明します。
スキャンしたリソースからテンプレートを作成する (コンソール)
スキャンしたリソースからスタックテンプレートを作成するには
-
CloudFormation コンソールの IaC ジェネレーターページ
を開きます。 -
画面上部のナビゲーションバーで、スキャンしたリソースが含まれる AWS リージョンを選択します。
-
[テンプレート] セクションから [テンプレートを作成] を選択します。
-
[新しいテンプレートから開始] を選択します。
-
[テンプレート名] に、テンプレートの名前を入力します。
-
(オプション) [削除ポリシー] を [置換ポリシーを更新] に設定します。
-
[次へ] をクリックし、スキャンしたリソースをテンプレートに追加します。
-
-
[スキャンしたリソースを追加] で、スキャンしたリソースのリストを参照し、テンプレートに追加するリソースを選択します。リソースは、リソース識別子、リソースタイプ、タグのいずれかでフィルターできます。フィルターは相互に包括的です。
-
必要なリソースすべてをテンプレートに追加したときに、[次へ] を選択し、[スキャンしたリソースを追加] ページを閉じて [関連リソースを追加] ページに進みます。
-
関連リソースの推奨リストを確認します。Amazon EC2 インスタンスやセキュリティグループなどの関連リソースは、相互に依存しており、通常は同じワークロードに属しています。生成されたテンプレートに含める関連リソースを選択します。
注記
このテンプレートには、関連リソースをすべて追加することが推奨されます。
-
テンプレートの詳細、スキャンしたリソース、関連リソースを確認します。
-
[テンプレートを作成] をクリックし、[確認して作成] ページを閉じてテンプレートを作成します。
スキャンしたリソースからテンプレートを作成する (AWS CLI)
スキャンしたリソースからスタックテンプレートを作成するには
-
スキャン中に見つかったリソースを一覧表示するには、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-identifierMyApp
以下はレスポンスの例です。
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」を参照してください。
-
cat
コマンドを使用して、リソースタイプと識別子をホームディレクトリのresources.json
という名前の JSON ファイルに保存します。前のステップの出力例に基づいた JSON の例を次に示します。$ cat > resources.json [ { "ResourceType": "AWS::EKS::Cluster", "ResourceIdentifier": { "ClusterName": "MyAppClusterName" } }, { "ResourceType": "AWS::AutoScaling::AutoScalingGroup", "ResourceIdentifier": { "AutoScalingGroupName": "MyAppASGName" } } ]
-
作成した
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
\ --resourcesfile://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 を実行した後、結果を統合します。
一覧に、重複したリソースが出力される場合があるため注意が必要です。
-
これらの変更とともに、次のように create-generated-template コマンドを使用して新しいスタックテンプレートを作成します。
-
を、スキャンされたリソースが含まれる AWS リージョンに置き換えます。us-east-1
-
を、作成するテンプレートの名前に置き換えます。MyTemplate
aws cloudformation create-generated-template --region
us-east-1
\ --generated-template-nameMyTemplate
\ --resourcesfile://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
" } -