re:Invent2020セッションレポート :(ZDC301)The journey of an AWS CloudFormation template to AWS CDK
概要
「CloudFormationテンプレートをどのようにCDKに移行すれば良いか」というテーマで、実際の移行方法をコードのデモを活用しながら説明してくれるセッションです。
Agenda
- pipelineテンプレートの移行
- インフラ(今回セッションではECSリソース)のCDK組み込み
- CDKネイティブに変更
- CDKの利点を活用
デモで使用されるコードのサンプルはこちら
Step1: migrate the Pipeline template
- まずはCodePipelineのCloudFormationのテンプレートをCDKに移行しよう
- インフラ側のCloudFormationのテンプレートはKeepしておく
- インフラストラクチャー(ECS側)はまだ一切変えない、パイプラインだけ移行していく
Why:
- ステートレスで本番サービスへのリスクも少ないので最初に移行しやすい
- 並行して(複数のパイプライン)実行しやすい
(ここで実際のコードでデモ、元となるCloudFormationテンプレートと、Pipeline CDKコードの紹介)
Step2: include infrastructure template
インフラテンプレート(ECSのCloudFormation)をCDKに組み込もう
- こんな感じ(デモより)、
CfnInclude
を使用してテンプレートを読み込む
- こんな感じ(デモより)、
互換性チェックのため、テスト(パラメータチェックなど)も合わせて組み込もう
Why:
- CDKネイティブなコードへの準備
- CDK化してうまく活用できる点がいくつかある
- パラメータをPipelineから取得してCDK経由で渡す、テストの追加、マルチアカウントなど
(ここで実際のコードでデモ)
Step3: turn into native CDK app
- パラメータを(CloudFormation)テンプレートから抽出してCDKに組み込もう
- 一気にやるのではなく徐々に、複雑さに応じて
- CDK assetsを使用してPipelineをシンプルにしよう
- Docker imageはAssetとしてファイル経由で取得
Why:
(ここで実際のコードでデモ)
Step4: take advantage of CDK
- autoscalingを追加しよう
- ここではECSサービスのAutoScaleをデモで実施
- アラームwith cdk-watchful(サードパーティな監視ライブラリ)を追加しよう
- その他色々好きなものを追加しよう
Why:
- CDKパワーを活用してリソース(構成)の再利用に役立てる
(ここで実際のコードでデモ)
Our Migration Toolbox (まとめ的な)
- スクラッチなコードを書き直そう
- PipeLineが良い例なので是非お試しを
- "ハイブリッド"スタック
- CloudFormationテンプレートをCDKにそのまま組み込むことでハイブリッドなスタックも可能
- 徐々に(step by step)でCDKネイティブに移行していく
- ステートフルなリソースをKeepしておく
- データベースやS3など、Statefulなリソースは注意、リソース本体は残しておいて、論理IDの置き換えで対応できるように
- ハイレベルな構成でCDKを活用しよう
- CDKを使いこなすと、CDKライブラリやサードパーティのライブラリをうまく活用できる
感想
私はCDK初心者で、今もCloudFormationで頑張って運用しているプロジェクトばかりです。そしてECSも多くのプロジェクトで使用しています。CloudFormationはAWS標準でわかりやすく書けて良いのですが、運用を考えるとちょっと無理して書かなきゃいけないところもあり、CDKもありかなぁと考えているところでした。
本番サービスに影響のないCodePipelineからの移行がおススメということで、サンプルコードを真似しながら試していこうかと思います。