CDK Appをv1からv2に移行するモチベーションまとめ

2022.06.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

昨年末 re:Invent期間中にCDK v2 がGAになりました。私もv1で書いていたアプリがあったので、そのうちv2に移行したいなぁと思っていたのですが、「結局v2にすると何が嬉しいんだっけ?」をよくわかっていなかったのでまとめてみました。

CDK v2への移行のモチベーション

すでにv1のアップデートは限られている

v1は6月1日よりメンテナンスモードに入りました。これにより、v1はv2に比べてアップデート内容が限られることになりました。

メンテナンスモードとは

メンテナンスモード期間中は

  • L1 constructの新規リリースやアップデート
  • 致命的なバグの修正
  • セキュリティアップデート

は引き続き行われます。ですが以下は行われなくなります。

  • 新機能リリース
  • 軽微なバグの修正
  • L2 constructの新規リリースやアップデート

特にL2 constructのアップデートが無くなるのが、CDKのメリットを大きく損なうので辛いですね。

さらに1年後には

メンテナンスモードも終了します。つまりL1 constructの新規リリースやアップデートも、バグ修正も、セキュリティアップデートも行われなくなってしまいます。(引き続きパッケージマネージャーからダウンロード可能で、コードはGitHubで確認することができます。)

パッケージインストールが基本一個だけで済む

v1はAWSサービスごとにパッケージが分割されています。それはつまりappで新しいサービスを利用したくなった場合、都度対応するパッケージを追加する必要があり手間です。

さらに、各パッケージのバージョンを正確にそろえておかないと、以下のようなデバッグしにくいエラーが起こることがあります。

v2ではすべてがaws-cdk-libという一つのパッケージに集約されます。ですのでv2では新しいサービスを利用する際にパッケージを追加する必要がありませんし、バージョンを揃える必要もありません。

マイナーバージョンアップデート時に破壊的変更が入らない

v1ではマイナーバージョンのアップデート時でも頻繁に破壊的変更がありました。ですのでアップデート時には入念な動作確認が必要でした。v2ではこれを改め、マイナーバージョンアップデートの際には破壊的変更が加わることはなくなりました。代わりに破壊的変更が入る実験的なライブラリは@aws-cdk-experiments/aws-xxxといった別のパッケージに収録され、メインのaws-cdk-libとは切り離されます。そのライブラリが成熟し安定するとaws-cdk-libに取り込まれます。

各feature flagsがデフォルトオンになった

feature flagsというのは、各フラグをオン(true)にすることで新機能が利用できるようになるCDKの仕組みです。これがv2ではデフォルトでオンつまり新機能を利用できる状態になっています。ほとんどの機能はオフにすることができなくなっていますが、いくつかの機能のみフラグをオフにしてv1の状態に戻す事ができます。

新しいbootstrapがデフォルトで使われる

上記feature flagsのうちの一つなのですが、v2では cdk bootstrapコマンドで使われるCFnテンプレートがmodern template と言われる新しいものに変わっています。(v1でもv1.25.0以降だとfeature flagをオンにして利用できます)

このmodern templateについて以前以下エントリにてまとめましたので、よろしければご覧ください。

クロスアカウント/マルチアカウントデプロイがやりやすくなる

上記 modern templateを利用したCDK Pipelinesのmodernバージョンを利用することで、CDパイプラインとデプロイ先を別々にしたクロスアカウントなデプロイパイプラインや、さらに発展して複数のアカウントに対してデプロイするパイプラインを簡単に作成できます。詳しくは以下のAWSブログをご覧ください。

DepricatedなAPIが削除された

v1がアップデートされていく過程で、多くのメソッドやクラスなどがDepricated(非推奨)となってきました。がDepricatedなだけで、依然使い続けることができました。

v2ではこれらDepricatedなものは廃止されました。ですので「どのメソッド(クラス)を使うのがベストなんだろう…」といった悩みが減るはずです。(一方で、v1でDepricatedなものを使われている場合、v2移行時にその部分のコードを書き換える必要があります。)

移行する!となった際に参考になる情報

上記リストを見て「移行したいなー」と思われたら、次は移行作業として実際どのようなことが発生するのか確認しましょう。以下ページ達が参考になります。

その他参考情報