みなさんどうもこんにちは。 エンジニアのゆい(@fyui_001)です。
🌊乗るしかないこのビックウェーブに🌊
皆さんはAWS CDKはご存知でしょうか? 一言で言えば使い慣れたプログラミング言語でAWSリソースをプロビジョニングできるツールキットです。
前回の記事に引き続き、サービスをEBからECSに移行したプロジェクトの取り組みを紹介します。 このプロジェクトで新たに導入したAWS CDKでv2がリリースされていたので、今回はAWS CDKのv1とv2の差分について書いていこうと思います。
第一弾の記事はこちら!
背景
今までM&AクラウドではAWS CDK含めTerraformなどのIaCツールを導入しておらず、AWSリソースの操作は基本的にAWSコンソール上で行っていました。
ではなぜサービスのECS移行に伴いAWS CDKを導入したかと言うと、AWSリソース変更をする際に証跡作り・確認用のためにAWSコンソールのキャプチャを撮りslackやesaなどに添付する非常に面倒な作業があったり、手順書があちこちにあり煩雑で手間がかかるなどの課題がありました。
IaCを導入することでインフラの設定がコードベースで定義できるので、GitHubのPRがそのまま証跡になりレビュー・確認等もGitHub上で行えるため一々スクリーンショットを撮りesaやslackに貼り付ける作業を省くことができるようになりました。
今回サービスのECSでは完全移行で新規リソースを構築する必要があり、IaCの構築の自動化やバージョン管理などの恩恵が受けられるタイミングだったので、最初はECS移行分のリソースのみ部分導入に至りました。
AWSに対応してるIaCツールはTerraformやAnsibleなど複数ありますが、今回AWS CDKを選択した理由は大体以下の通りです。
- TypeScriptやPython・Java・.NET等の言ったプログラミング言語で記述できる
- コード記述量が少なく書ける
- AWS公式ツールでサポートが受けられる
- 本体の安定性はさておき終了したとしてもCloudFormation管理に戻すことができる
- 私がAWS CDKの実務経験があった
- 個人的に開発したECS環境を構築するAWS CDKのプログラムがあり、開発コストを抑えることが可能だった
個人的に開発していたAWS CDKの資産ですが、1年ほど前に開発したもので、その時はまだv1でしか開発しておらず、今回久々にAWS CDKの情報を調べていたら昨年12月にv2がリリースされていたので、ついでにv2のマイグレーションも行いました。 今回はv1とv2で何が変わったのかを大まかにお話しようと思います。
AWS CDKって何?
従来から提供されているCloudFormationは、JSONやYAMLと言った構造化ファイルでリソースを定義しますが、CDKでは前述した通りプログラミング言語で利用できるのが大きな違いと言えます。
v1とv2の差分
alpha版が出てから1年がかりでつい最近の2021年12月にv2.0.0がリリースされました。
主な差分を簡単に列挙すると以下の通りで、v2になってCDKの各リソースに破壊的な変更が入ったとかではありません。
AWS Construct Libraryが1つのパッケージになった
v1では各サービス毎にパッケージが分割されていて、使いたいサービスのパッケージを都度都度ダウンロードしないといけなくて、新しいサービスを追加するときに一々npm install
とかpip install
しないと行けなかったのが、aws-cdk-lib
と言う一つのパッケージにまとめられ、これ1つですべてのAWS Construct Libraryにアクセスできるようになったので少し扱いやすくなりました。
個人的にこれは結構うれしい変更です。
@aws-cdk/aws-ec2
や '@aws-cdk/core'
といったパッケージを必要に応じて個別にインストール必要がなくなりaws-cdk-lib
を入れれば解決です。
DeprecatedなAPIが削除された
v1で非推奨になっていた多くのプロパティやメソッドが完全に削除されました。 v1で非推奨なAPIを使用している場合、v2にマイグレーションするにはアプリケーションとライブラリを更新して、代替のAPIに切り替える必要があります。
Feature flagsの新しい動作がデフォルトに
v1で導入されていたFeature flagsですが、v2ではすべてのFeature flagsが有効になりました。 AWS CDKアプリケーションをv1からv2に移行する場合は、cdk diffコマンドを実行して、アプリケーションへの影響を確認することをお勧めされてます。
ExperimentalなAPIのライフサイクルが新しくなった
v2から新しいライフサイクルを導入され、新しい実験的なConstructライブラリは、メインのaws-cdk-lib
ライブラリから完全に独立した@aws-cdk-experiments
配下に移動され、@aws-cdk-experiments/aws-xxx
のように実験的ながわかる名前で配布され、0.x
系のバージョン番号がつけられます。
APIがstableになった際にaws-cdk-lib
に移動されるようになりました。
新しいブートストラップリソースがデフォルトになった
CDKを初めて使う時はcdk bootstrap
を実行してデプロイ用のS3バケットを作成する必要がありますが、cdk bootstrap
で生成されるリソースが変更されました。
前述のFeature Flagsを使って手動で新しいブートストラップリソースにオプトインしてない場合、AWSアカウントとリージョン毎にAWS CDK CLIでcdk bootstrap
を実行し再度ブートストラップする必要があります。
さいごに
色々とCDKのことを書きたかったですが、長くなるので今回はAWS CDKのv1とv2の差分を紹介させていただきました。
最後に... M&Aクラウドでは現在エンジニアやPdMなど幅広く募集中です!!もし興味を持ってくださった方はお気軽にお声がけください!