はじめに
先日、cdk v2 が stable になりました 🎉
と言うことで、早速自身がちょこちょこ書いている cdk を 1.78.0
から 2.0.0
に上げてみました。
今のところ大きな問題が起きていないので、却って不安になっています 💦
前提条件
- mac ユーザー
- typescript で cdk を管理
変更内容
詳しくはコチラの公式記事を見ていただければです。
私的に気になったアップデート点を抜粋します。
- コアライブラリと安定したコンストラクトライブラリ(各サービスごとのパッケージ)が
aws-cdk-lib
に統合されました- 今までそれぞれのサービスごとにパッケージをインストールしていましたが、それが
aws-cdk-lib
をインストールするだけで良くなりました
- 今までそれぞれのサービスごとにパッケージをインストールしていましたが、それが
- 新しい実験的な(Experimental)なコンストラクトライブラリは、
aws-cdk-lib
ではなく ex.@aws-cdk/aws-amplify-alpha
のような別パッケージとして管理されるようになりました- Experimental は suffix として
alpha
と付くようです - v1.x では同じパッケージ内で破壊的な変更が加わる可能性があり、それを気づかずに使ってしまうことがありましたが、v2 からは安定板にならない限り、
aws-cdk-lib
には統合されないようになりました
- Experimental は suffix として
- v1.x と既存のコンストラクトライブラリで廃止されたプロパティ、メソッド、type は、v2 の API からは完全に削除されています
- デプロイ時にモダンブートストラップスタックを使用しないといけないようです
- v1 のデフォルトであったレガシーブートストラップスタックはサポートされなくなりました
- そのため、バージョンを上げる際には
cdk bootstrap
を行う必要があります
注意点
- 基本的な要件は v1 と同時ですが、typescript の場合は、3.8 以上が必要です
- CDK v2 は v2 もしくはそれより最新の CDK Toolkit(
aws-cdk
) が必要です - v1 と v2 を並行して利用することはできません
- v1 は 2022/06/01 までメンテナンスされ、2023/06/01 には EOL されます
バージョン更新
詳しくは公式のコチラの手順も合わせて読んで頂ければです。
全てではないですが、今回私が変更したサンプルを示します。
@aws-cdk/aws-apigateway
などの各サービスごとに別れていたパッケージが aws-cdk-lib
に集約されています。
1// package.json
2
3// old
4"devDependencies": {
5 "aws-cdk": "1.78.0",
6 "@aws-cdk/aws-apigateway": "1.78.0",
7 "@aws-cdk/aws-certificatemanager": "1.78.0",
8 .
9 .
10 .
11}
12// ↓
13// new
14"devDependencies": {
15 "aws-cdk": "2.0.0",
16 "aws-cdk-lib": "2.0.0",
17 "constructs": "^10.0.0",
18 .
19 .
20 .
21}
lib 側(stack を記述しているディレクトリ)で記述しているパッケージのインポートを修正します
core
がaws-cdk-lib
に移動しています- サービスごとのパッケージも
core
から呼び出します
1// lib/iam.ts
2// stackを記述しているファイル
3
4// old
5import * as cdk from "@aws-cdk/core";
6import * as iam from "@aws-cdk/aws-iam";
7
8// ↓
9
10// new
11import { App, Stack, aws_iam as iam } from "aws-cdk-lib";
遭遇したエラー
バージョンアップ後に、cdk deploy
をかけると下記のようなエラーが出ます。
公式でも言及されていますが、v1 から v2 に上がる際に cdk bootstrap
をする必要があります。
1❌ MyStack failed: Error: MyStack: SSM parameter /cdk-bootstrap/hnb659fds/version not found. Has the environment been bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)
2 at CloudFormationDeployments.validateBootstrapStackVersion (.../aws-cdk/lib/api/cloudformation-deployments.ts:323:13)
3 at processTicksAndRejections (internal/process/task_queues.js:97:5)
4MyStack: SSM parameter /cdk-bootstrap/hnb659fds/version not found. Has the environment been bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)
ちなみに私は github actions 上で oidc を使って cdk deploy
を回しているのですが、その際にデプロイ用のロールに対して ssm:GetParameter
が足りないと怒られたので、雑に AmazonSSMFullAccess
の managedPolicy をデプロイロールに割り当てています。
要調査なのですが、一旦これで通しています 💦
1example-stack failed: Error: example-stack: User: arn:aws:sts::00000000000:assumed-role/example-deploy/token-file-web-identity is not authorized to perform: ssm:GetParameter on resource: arn:aws:ssm:ap-northeast-1:00000000000:parameter/cdk-bootstrap/xxxxxxxx/version because no identity-based policy allows the ssm:GetParameter action
おわりに
ほとんど v2 の恩恵は受けない構成なのですが、こまめにアップデートをかけないと、とてもしんどい思いをすると本職で経験しているのでサッと今回はやってみました。 本職の方では v2 に上げれるのだろうか... 💦