お世話になっている開発案件にて、
既存のリソースをCloudFormationに適応してみてはどうか?
というお話が上がりまして、早速最近解禁されました既存リソースのインポート機能が使えないかとおもい触ってみました。
新機能 – CloudFormation スタックへの既存リソースのインポート
https://aws.amazon.com/jp/blogs/news/new-import-existing-resources-into-a-cloudformation-stack/
今回初めてCloudFormationを触ったこともあり、つっかかった点や、便利だなと思った点があったので、何か参考になればと思い共有できればと思います^ ^
なにが便利なのか?
CloudFormationへ既存リソースを移行したり再構築する手間が省けました。
今まではCloudFormationに既存リソースを組み込むとした場合、Stackに新規でリソースを紐づけたあとに、データの移行なりインスタンスの内部設定だったりを行う必要がありました。RDSとか大変そうですね^ ^;
また既存でなくともStackごと新規で作成したリソースについて、そのStackが削除されると、紐づけたリソースが残ったとしても、別のStackには紐づけられず、また一から紐づけ直しになってしまっていました。(https://dev.classmethod.jp/cloud/aws/cloudformation-launches-resource-import/)
今回の機能を用いることで、こういったStackに再度紐づけを行う際の再構築の手間であったり、既存リソースをCloudFormationに移行する手間が大幅に削減できそうです。
インポート時に「DeletionPolicy」の設定が必須
ではここからは既存リソースのインポートについて。
既存リソースのインポートには「DeletionPolicy」の設定が必須です。
本来Stackに紐づくリソースは、Stackが削除されると一緒に削除されます。
このままだと既存リソースを紐づけた際に、うっかりStackを削除してしまうと、既存リソースも消えてしまいます。これは大変です^ ^;
そのため「Stack削除時にリソースはどうするか?」という設定が必要になります。
この設定が「DeletionPolicy」です。こちらを「Retain」と指定しておくと、Stack削除時もリソースは残ったままになります。
CloudFormerによるテンプレート出力では、こちらの設定が書いていないので、別途追加する必要があります。(これが地味に時間かかる^ ^;)
ご丁寧なことに既存インポート機能ではこの設定が存在するかをチェックしてくれるので、うっかりミス対策も意識させてくれます。非常に親切ですね^ ^
既存リソースインポートと、既存リソースの編集は同時にできない。
既存リソースインポートを行った後、別の既存リソースインポートと、インポートしたリソースの編集を一括して行うことはできないようです。
編集は「変更セット」機能を使って別々に行ってください。
すでに別のStackに紐づいているリソースは共有できない
他のStackで関連付けされている既存リソースは原則関連付けできません。一回そのStackとの紐づけ関係を解消するか、Export/Import設定をテンプレートに記載する必要があります。
参考:CloudFormationのスタック間でリソースを参照する
https://dev.classmethod.jp/cloud/aws/cfn-cross-stack-reference/
触ってみた所感
実際さわってみたところ、まだこの機能ではインポートできないサービスもあるようで、すべてがすべてインポートできるようではないようです。(実際「対応してないよエラー」に出くわしました)この機能を使って既存のサービスをCloudFrontに移行する場合、大規模なものだとまだ難しいのかも^ ^;
ただし、今後対応サービスは増えていくでしょうし、やはり再構築の手間やStackへの着脱が可能になったのは大きいと思います。
今後の発展に期待ですね!