🪆
AWS CloudFormation スタックの子スタックにリソースを自動インポートする
隙間記事です。
背景
AWS CloudFormation には自動インポート機能があり,対応リソース[1]について,テンプレートと同名のリソースが存在すれば,スタックに自動でインポートすることができます。
AWS CLI では,aws cloudformation create-change-set コマンド[2]に --import-existing-resources オプションを指定することで,テンプレートに含まれるリソースのうち,自動インポートに対応していて同名のリソースが存在するものが,変更セットに Import アクションとして追加されます。
問題
スタックをネストしていて,子スタックにリソースを自動インポートしたい場合,--import-existing-resources を付けても Import アクションとして認識されず,変更セット実行時に新規作成しようとして,リソースが既に存在する旨のエラーになってしまう場合があります。
自動インポートのドキュメントを読むと,ネストスタックではルートスタックから変更セットを作成することが明記されています。実現できそうに思えますが,それ以上は詳しく書かれていません。
一体どうすればよいでしょうか?
解決策
--include-nested-stacks オプションを指定します。
これにより,子スタックの中身のリソースまで変更セットが作成され,そこで自動インポートの判定もされるようになります。
子スタックで自動インポートする場合は,create-change-set コマンドで2個のオプションを指定する必要があります。コマンド例は以下の通りです。
aws cloudformation create-change-set \
--stack-name my-root-stack \
--change-set-name CreateChangeSet \
--change-set-type CREATE \
--template-body file://my-root-stack.yaml \
--import-existing-resources \
--include-nested-stacks
Discussion