翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
既存のスタックのネスト化
resource import
機能を使用して、既存のスタックを別の既存のスタック内にネスト化します。ネスト化されたスタックは、他のテンプレート内から宣言および参照する一般的なコンポーネントです。これにより、同じ構成をテンプレートにコピーして貼り付けるのを避け、スタックの更新を簡素化できます。共通コンポーネントのテンプレートがある場合は、AWS::CloudFormation::Stack
リソースを使用して、別のテンプレート内からこのテンプレートを参照できます。ネストされたスタックの詳細については、「ネストされたスタックの操作 ネストされたスタックのルートスタックを表示するには ルートスタックに属するネストされたスタックを表示するには」を参照してください。
AWS CloudFormation は、resource import
を使用して 1 つのレベルのネスト化のみをサポートします。つまり、子スタックにスタックをインポートしたり、子を持つスタックをインポートしたりすることはできません。
ネストされたスタックのインポートの検証
ネストされたスタックのインポートオペレーション中に、AWS CloudFormation は以下の検証を実行します。
-
親スタックテンプレートのネスト化された
AWS::CloudFormation::Stack
定義は、実際のネスト化されたスタックのテンプレートと一致します。 -
親スタックテンプレートのネスト化された
AWS::CloudFormation::Stack
定義のタグは、実際のネスト化されたスタックリソースのタグと一致します。
AWS Management Console を使用した既存のスタックのネスト化
-
Retain
DeletionPolicy を使用して、AWS::CloudFormation::Stack
リソースを親スタックテンプレートに追加します。次の親テンプレート例では、NestedStack
がインポートのターゲットです。JSON
{ "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "ServiceTable":{ "Type":"AWS::DynamoDB::Table", "Properties":{ "TableName":"Service", "AttributeDefinitions":[ { "AttributeName":"key", "AttributeType":"S" } ], "KeySchema":[ { "AttributeName":"key", "KeyType":"HASH" } ], "ProvisionedThroughput":{ "ReadCapacityUnits":5, "WriteCapacityUnits":1 } } }, "NestedStack" : { "Type" : "AWS::CloudFormation::Stack", "DeletionPolicy": "Retain", "Properties" : { "TemplateURL" : "https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.template", "Parameters" : { "InstanceType" : "t1.micro", "KeyName" : "mykey" } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Resources: ServiceTable: Type: 'AWS::DynamoDB::Table' Properties: TableName: Service AttributeDefinitions: - AttributeName: key AttributeType: S KeySchema: - AttributeName: key KeyType: HASH ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 1 NestedStack: Type: 'AWS::CloudFormation::Stack' DeletionPolicy: Retain Properties: TemplateURL: >- https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.template Parameters: InstanceType: t1.micro KeyName: mykey
-
AWS CloudFormation コンソールを開きます。
-
[スタック] ページで、親スタックを選択した状態で [Stack actions (スタックアクション)] を選択し、[Import resources into stack (リソースをスタックにインポートする)] を選択します。
-
[Import overview (インポートの概要)] ページを参照して、このオペレーション中に指定する必要がある項目の一覧を確認してください。続いて、[Next (次へ)] を選択します。
-
[Specify template (テンプレートを指定)] ページで、以下のいずれかの方法を使用して更新した親テンプレートを指定し、[次へ] を選択します。
-
[Amazon S3 URL] を選択し、テキストボックスでテンプレートの URL を指定します。
-
[Upload a template file (テンプレートファイルのアップロード)] を選択し、テンプレートを参照します。
-
-
[Identify resources (リソースの識別)] ページで、
AWS::CloudFormation::Stack
リソースを識別します。-
[Identifier property (識別子のプロパティ)] で、リソース識別子のタイプを選択します。例えば、
AWS::CloudFormation::Stack
リソースはStackId
プロパティを使用して識別できます。 -
[Identifier value (識別子の値)] に、実際のプロパティ値を入力します。例えば、
です。arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10
-
[Next] (次へ) をクリックします。
-
-
[Specify stack details (スタック詳細の指定)] ページで、任意のパラメータを変更し、[次へ] を選択します。これにより、変更セットが自動的に作成されます。
重要
作成、更新、または削除オペレーションを開始する既存のパラメータを変更すると、インポートオペレーションは失敗します。
-
[Review
stack_name
(stack_name の確認)] ページで、インポートしようとしているリソースが正しいことを確認し、[Import resources (リソースのインポート)] を選択します。これにより、最後のステップで作成した変更セットが自動的に実行されます。この時点で、インポートされたリソースにはスタックレベルのタグが適用されます。 -
親スタックの [Stack details] (スタックの詳細) ページの [Events] (イベント) ペインが表示されます。
注記
AWS::CloudFormation::Stack
リソースはすでに AWS CloudFormation によって管理されていたため、このインポートオペレーションの後、親スタックでドリフト検出を実行する必要はありません。
AWS CLI を使用した既存のスタックのネスト化
-
Retain
DeletionPolicy を使用して、AWS::CloudFormation::Stack
リソースを親スタックテンプレートに追加します。次の親テンプレート例では、NestedStack
がインポートのターゲットです。JSON
{ "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "ServiceTable":{ "Type":"AWS::DynamoDB::Table", "Properties":{ "TableName":"Service", "AttributeDefinitions":[ { "AttributeName":"key", "AttributeType":"S" } ], "KeySchema":[ { "AttributeName":"key", "KeyType":"HASH" } ], "ProvisionedThroughput":{ "ReadCapacityUnits":5, "WriteCapacityUnits":1 } } }, "NestedStack" : { "Type" : "AWS::CloudFormation::Stack", "DeletionPolicy": "Retain", "Properties" : { "TemplateURL" : "https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.template", "Parameters" : { "InstanceType" : "t1.micro", "KeyName" : "mykey" } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Resources: ServiceTable: Type: 'AWS::DynamoDB::Table' Properties: TableName: Service AttributeDefinitions: - AttributeName: key AttributeType: S KeySchema: - AttributeName: key KeyType: HASH ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 1 NestedStack: Type: 'AWS::CloudFormation::Stack' DeletionPolicy: Retain Properties: TemplateURL: >- https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.template Parameters: InstanceType: t1.micro KeyName: mykey
-
以下のパラメータを使用して、タイプ
IMPORT
の変更セットを作成します。--resources-to-import
はインライン YAML をサポートしていません。>
aws cloudformation create-change-set --stack-name
TargetParentStack
--change-set-nameImportChangeSet
--change-set-typeIMPORT
--resources-to-import "[{\"ResourceType\":\AWS::CloudFormation::Stack
\",\"LogicalResourceId\":\"MyStack
\",\"ResourceIdentifier\":{\"StackId
\":\"arn:aws:cloudformation:us-east-2:123456789012:stack/mystack-mynestedstack-sggfrhxhum7w/f449b250-b969-11e0-a185-5081d0136786
\"}}] --template-bodyfile://templateToImport.json
AWS CLI は、次の例に示すように、
resources-to-import
パラメータへの入力としてテキストファイルもサポートします。--resources-to-import:
file://resourcesToImport.txt
このチュートリアルでは、
file://resourcesToImport.txt
に次の内容が含まれています。JSON
[ { "ResourceType":"AWS::CloudFormation::Stack", "LogicalResourceId":"MyStack", "ResourceIdentifier": { "StackId":"arn:aws:cloudformation:us-east-2:123456789012:stack/mystack-mynestedstack-sggfrhxhum7w/f449b250-b969-11e0-a185-5081d0136786" } } ]
YAML
ResourceType: 'AWS::CloudFormation::Stack' LogicalResourceId: MyStack ResourceIdentifier: StackId: >- arn:aws:cloudformation:us-east-2:123456789012:stack/mystack-mynestedstack-sggfrhxhum7w/f449b250-b969-11e0-a185-5081d0136786
-
変更セットを確認し、正しいスタックがインポートされることを確認します。
>
aws cloudformation describe-change-set --change-set-name
ImportChangeSet
-
変更セットを実行して、ソース親スタックにスタックをインポートします。この時点で、インポートされたリソースにはスタックレベルのタグが適用されます。インポートオペレーション
(IMPORT_COMPLETE)
が正常に完了すると、スタックは正常にネストされています。>
aws cloudformation execute-change-set --change-set-name
ImportChangeSet
注記
AWS::CloudFormation::Stack
リソースはすでに AWS CloudFormation によって管理されていたため、このインポートオペレーションの後、親スタックでドリフト検出を実行する必要はありません。