スタックへの既存リソースのインポート
このインポートオペレーションでは、以下の情報を指定する必要があります。
-
スタックにすでに含まれているリソースとインポートするリソースの両方を含む、スタック全体を記述するテンプレート。インポートする各リソースは、テンプレートに DeletionPolicy 属性がある必要があります。
-
各ターゲットリソースの一意の識別子。適切なサービスコンソールにアクセスして、一意の識別子を取得します。
このチュートリアルでは、TemplateToImport.json
というテンプレートの例を示します。ServiceTable
は現在スタックの一部であり、GamesTable
はインポートのターゲットです。
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Import test", "Resources": { "ServiceTable":{ "Type":"AWS::DynamoDB::Table", "Properties":{ "TableName":"Service", "AttributeDefinitions":[ { "AttributeName":"key", "AttributeType":"S" } ], "KeySchema":[ { "AttributeName":"key", "KeyType":"HASH" } ], "ProvisionedThroughput":{ "ReadCapacityUnits":5, "WriteCapacityUnits":1 } } }, "GamesTable": { "Type": "AWS::DynamoDB::Table", "DeletionPolicy": "Retain", "Properties": { "TableName": "Games", "AttributeDefinitions": [ { "AttributeName": "key", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "key", "KeyType": "HASH" } ], "ProvisionedThroughput": { "ReadCapacityUnits": 5, "WriteCapacityUnits": 1 } } } } }
AWS Management Console を使用して既存のリソースをスタックにインポートする
-
AWS Management Console にサインインして、https://console.aws.amazon.com/cloudformation
で AWS CloudFormation コンソールを開きます。 -
[スタック] ページで、リソースのインポート先のスタックを選択します。
-
[Stack actions (スタックアクション)] を選択し、[Import resources into stack (リソースをスタックにインポートする)] を選択します。
-
[インポートの概要] ページを確認し、[次へ] を選択します。
-
[Specify template (テンプレートを指定)] ページで、以下のいずれかの方法を使用して更新したテンプレートを指定し、[次へ] を選択します。
-
[Amazon S3 URL] を選択し、テキストボックスでテンプレートの URL を指定します。
-
[Upload a template file (テンプレートファイルのアップロード)] を選択し、テンプレートを参照します。
-
-
[Identify resources (リソースの識別)] ページで、各ターゲットリソースを識別します。
-
[Identifier property (識別子のプロパティ)] で、リソース識別子のタイプを選択します。たとえば、
AWS::DynamoDB::Table
リソースはTableName
プロパティを使用して識別できます。 -
[Identifier value (識別子の値)] に、実際のプロパティ値を入力します。たとえば、サンプルテンプレートの
GamesTable
リソースのTableName
は
です。Games
-
[Next] を選択します。
-
-
[Specify stack details (スタック詳細の指定)] ページで、任意のパラメータを更新し、[次へ] を選択します。これにより、変更セットが自動的に作成されます。
注記 作成、更新、または削除オペレーションを開始する既存のパラメータを変更すると、インポートオペレーションは失敗します。
-
[Review
stack-name
(スタック名の確認)] ページで、インポートするリソースを確認し、[Import resources (リソースのインポート)] を選択します。これにより、最後のステップで作成した変更セットが自動的に実行されます。この時点で、インポートされたリソースにはスタックレベルのタグが適用されます。スタックの [イベント] ページが表示されます。
-
(任意)スタックでドリフト検出を実行し、インポートされたリソースのテンプレートと実際の設定が一致していることを確認します。ドリフトの検出の詳細については、「CloudFormation スタック全体のドリフトの検出」を参照してください。
-
(オプション)インポートしたリソースが予想されるテンプレート設定と一致しない場合は、テンプレート設定を修正するか、リソースを直接更新します。ドリフトしたリソースのインポートの詳細については、「インポートオペレーションでドリフトを解決する」を参照してください。
AWS CLI を使用した既存のリソースのスタックへのインポート
-
オプションで
GetTemplateSummary
を実行して、テンプレート内の各リソースタイプを識別するプロパティを確認できます。たとえば、AWS::DynamoDB::Table
リソースはTableName
プロパティを使用して識別できます。サンプルテンプレートのGamesTable
リソースの場合、TableName
の値はGames
です。>
aws cloudformation get-template-summary --template-url https://DOC-EXAMPLE-BUCKET
.s3.us-west-2
.amazonaws.com/TemplateToImport.json
-
インポートするリソースとその一意の識別子のリストを次の形式で作成します。
[{\"ResourceType\":\"
AWS::DynamoDB::Table
\",\"LogicalResourceId\":\"GamesTable
\",\"ResourceIdentifier\":{\"TableName
\":\"Games
\"}}] -
以下のパラメータを使用して、タイプ
IMPORT
の変更セットを作成します。--resources-to-import
はインライン YAML をサポートしていません。>
aws cloudformation create-change-set --stack-nameTargetStack
--change-set-nameImportChangeSet
--change-set-typeIMPORT
--resources-to-import "[{\"ResourceType\":\"AWS::DynamoDB::Table
\",\"LogicalResourceId\":\"GamesTable
\",\"ResourceIdentifier\":{\"TableName
\":\"Games
\"}}]" --template-url https://DOC-EXAMPLE-BUCKET
.s3.us-west-2
.amazonaws.com/TemplateToImport.json
AWS CLI は、次の例に示すように、
resources-to-import
パラメータへの入力としてテキストファイルもサポートします。--resources-to-import:
file://ResourcesToImport.txt
このチュートリアルでは、
file://ResourcesToImport.txt
に次の内容が含まれています。[ { "ResourceType":"AWS::DynamoDB::Table", "LogicalResourceId":"GamesTable", "ResourceIdentifier": { "TableName":"Games" } } ]
-
変更セットを確認し、正しいリソースがインポートされることを確認します。
>
aws cloudformation describe-change-set --change-set-nameImportChangeSet
--stack-nameTargetStack
-
変更セットを実行して、リソースをインポートします。この時点で、インポートされたリソースにはスタックレベルのタグが適用されます。オペレーション
(IMPORT_COMPLETE)
が正常に完了すると、リソースは正常にインポートされています。>
aws cloudformation execute-change-set --change-set-nameImportChangeSet
--stack-nameTargetStack
-
(オプション)
IMPORT_COMPLETE
スタックでドリフト検出を実行し、インポートされたリソースのテンプレートと実際の設定が一致していることを確認します。ドリフトの検出の詳細については、「CloudFormation スタック全体のドリフトの検出」を参照してください。>
aws cloudformation detect-stack-drift --stack-nameTargetStack
{ "Stack-Drift-Detection-Id" : "624af370-311a-11e8-b6b7-500cexample" }>
aws cloudformation describe-stack-drift-detection-status --stack-drift-detection-id624af370-311a-11e8-b6b7-500cexample
>
aws cloudformation describe-stack-resource-drifts --stack-nameTargetStack
-
(オプション)インポートしたリソースが予想されるテンプレート設定と一致しない場合は、テンプレート設定を修正するか、リソースを直接更新します。ドリフトしたリソースのインポートの詳細については、「インポートオペレーションでドリフトを解決する」を参照してください。