fu3ak1's tech days

何事もシンプルに。主にAWS関連の記事を書いています

re:Invent2020セッションレポート :(ZDC301)The journey of an AWS CloudFormation template to AWS CDK

概要

「CloudFormationテンプレートをどのようにCDKに移行すれば良いか」というテーマで、実際の移行方法をコードのデモを活用しながら説明してくれるセッションです。

Agenda

  1. pipelineテンプレートの移行
  2. インフラ(今回セッションではECSリソース)のCDK組み込み
  3. CDKネイティブに変更
  4. CDKの利点を活用

デモで使用されるコードのサンプルはこちら

github.com

f:id:fu3ak1:20201201135838p:plain

Step1: migrate the Pipeline template

  • まずはCodePipelineのCloudFormationのテンプレートをCDKに移行しよう
  • インフラ側のCloudFormationのテンプレートはKeepしておく

Why:

  • ステートレスで本番サービスへのリスクも少ないので最初に移行しやすい
  • 並行して(複数のパイプライン)実行しやすい

(ここで実際のコードでデモ、元となるCloudFormationテンプレートと、Pipeline CDKコードの紹介)

f:id:fu3ak1:20201201140039p:plain

Step2: include infrastructure template

  • インフラテンプレート(ECSのCloudFormation)をCDKに組み込もう

    • こんな感じ(デモより)、CfnIncludeを使用してテンプレートを読み込む f:id:fu3ak1:20201201140844p:plain
  • 互換性チェックのため、テスト(パラメータチェックなど)も合わせて組み込もう

Why:

  • CDKネイティブなコードへの準備
  • CDK化してうまく活用できる点がいくつかある
    • パラメータをPipelineから取得してCDK経由で渡す、テストの追加、マルチアカウントなど

(ここで実際のコードでデモ)

f:id:fu3ak1:20201201140424p:plain

Step3: turn into native CDK app

  • パラメータを(CloudFormation)テンプレートから抽出してCDKに組み込もう
    • 一気にやるのではなく徐々に、複雑さに応じて
  • CDK assetsを使用してPipelineをシンプルにしよう
    • Docker imageはAssetとしてファイル経由で取得

Why:

  • aws-ecs-patternを使用して、ECSの様々なユースケースに対応できる
  • CDKを使用したDocker imageのビルド、ECRへのpushができる
  • 書くコードも少なく済む

(ここで実際のコードでデモ)

f:id:fu3ak1:20201201141101p:plain

Step4: take advantage of CDK

  • autoscalingを追加しよう
    • ここではECSサービスのAutoScaleをデモで実施
  • アラームwith cdk-watchful(サードパーティな監視ライブラリ)を追加しよう
    • CPUやメモリ、ALBへのリクエスト数のメトリクス監視、アラームを自動設定してくれる
    • CloudWatchダッシュボードも追加してくれる
  • その他色々好きなものを追加しよう

Why:

  • CDKパワーを活用してリソース(構成)の再利用に役立てる

(ここで実際のコードでデモ)

f:id:fu3ak1:20201201141548p:plain

Our Migration Toolbox (まとめ的な)

  • クラッチなコードを書き直そう
    • PipeLineが良い例なので是非お試しを
  • "ハイブリッド"スタック
    • CloudFormationテンプレートをCDKにそのまま組み込むことでハイブリッドなスタックも可能
    • 徐々に(step by step)でCDKネイティブに移行していく
  • ステートフルなリソースをKeepしておく
    • データベースやS3など、Statefulなリソースは注意、リソース本体は残しておいて、論理IDの置き換えで対応できるように
  • ハイレベルな構成でCDKを活用しよう
    • CDKを使いこなすと、CDKライブラリやサードパーティのライブラリをうまく活用できる

f:id:fu3ak1:20201201142312p:plain

感想

私はCDK初心者で、今もCloudFormationで頑張って運用しているプロジェクトばかりです。そしてECSも多くのプロジェクトで使用しています。CloudFormationはAWS標準でわかりやすく書けて良いのですが、運用を考えるとちょっと無理して書かなきゃいけないところもあり、CDKもありかなぁと考えているところでした。

本番サービスに影響のないCodePipelineからの移行がおススメということで、サンプルコードを真似しながら試していこうかと思います。