この情報は古いです。最新の手順はこちらを参照してください:
Migrating to AWS CDK v2
AWS CDK v2.0がalphaリリースされていたので、とりあえず導入してみた際の覚書。
前提
AWS CDK 1.77.0 を利用しているプロジェクト(以下、1系)がすでに存在するとします。
本記事では、そのプロジェクトをAWS CDK v2.0に移行させることを目的にします。
改修が必要なポイント
既存プロジェクトをCDK v2.0に移行する上で、最低限必要な変更点をまとめます。
package.json
従来のCDKでは、AWSサービスごとのライブラリを個別にインストールする必要がありました。(例: @aws-cdk/aws-codebuild
, @aws-cdk/aws-lambda
など)
CDK v2.0では、これらは単一のパッケージに集約されています。
このため、 package.json
は下記のように変更します。
{
"name": "cdk-sample",
"version": "0.1.0",
"bin": {
"app": "bin/app.ts"
},
"scripts": {
"build": "tsc",
"watch": "tsc -w",
"test": "jest",
"cdk": "cdk"
},
"devDependencies": {
"@aws-cdk/assert": "1.77.0",
"@types/jest": "^26.0.10",
"@types/node": "10.17.27",
"jest": "^26.4.2",
"ts-jest": "^26.2.0",
"aws-cdk": "1.77.0",
"ts-node": "^9.0.0",
"typescript": "~3.9.7"
},
"dependencies": {
"@aws-cdk/core": "1.77.0",
"@aws-cdk/aws-lambda": "1.77.0",
"@aws-cdk/aws-apigateway": "1.77.0",
}
}
↓
{
"name": "cdk-sample",
"version": "0.1.0",
"bin": {
"app": "bin/app.ts"
},
"scripts": {
"build": "tsc",
"watch": "tsc -w",
"test": "jest",
"cdk": "cdk"
},
"devDependencies": {
"@types/jest": "^26.0.10",
"@types/node": "10.17.27",
"jest": "^26.4.2",
"ts-jest": "^26.2.0",
"aws-cdk": "^2.0.0-alpha.0",
"ts-node": "^9.0.0",
"typescript": "~3.9.7"
},
"dependencies": {
"aws-cdk-lib": "^2.0.0-alpha.0",
"constructs": "^3.0.4"
}
}
変更点は下記です:
-
@aws-cdk/assert
を削除 -
@aws-cdk/*
を削除 -
aws-cdk
のバージョンをalpha版に書き換え -
aws-cdk-lib
,constructs
を追加
aws-cdk-lib
ライブラリ が、今まで個別にインストールしていたパッケージが集約されたものです。
今後は使うサービスが増える度に package.json
を書き換える必要がなくなりますね。
constructs
ライブラリ は、CDK v2.0から明示的にインストールすることが必要になるようでした。
(これまでは各モジュールの依存になっており、別々にインストールされていたようです)
@aws-cdk/assert
ライブラリ はCDKのテスト用ライブラリでしたが、v2.0版は用意されていないようです。
サンプルでもjestの関数を多用するような形に書き換えられていました。
今後のCDKテストベストプラクティスはまた探っていければと思います。
パッケージのimport方法
合わせて、パッケージをimportする書き方も変わります。
下記はTypeScriptの例です。
下記の順番で機械的に置換すれば良さそうです:
-
@aws-cdk/core
→aws-cdk-lib
に -
@aws-cdk
→aws-cdk-lib
に
import * as apigateway from "@aws-cdk/aws-apigateway";
import * as lambda from "@aws-cdk/aws-lambda";
import { App, Duration, Stack, StackProps } from "@aws-cdk/core";
↓
import * as apigateway from "aws-cdk-lib/aws-apigateway";
import * as lambda from "aws-cdk-lib/aws-lambda";
import { App, Duration, Stack, StackProps } from "aws-cdk-lib";
動かしてみる
上記の変更をした上で、 npm install
, npm run build
, npm run cdk synth
してみましょう。
特に今までと変わりない挙動で動きました!
まとめ
今のところは、CDK1系→2系への移行は容易にできそうです。
CDK v2.0の変更点やロードマップは下記にまとまっていますが、1系のつらみを解消してくれる点も多いので、ぜひ乗り換えたいですね。
- https://github.com/aws/aws-cdk-rfcs/blob/master/text/0079-cdk-2.0.md
- https://github.com/aws/aws-cdk/projects/10
※ ただしsemvarの規則の通り、メジャーアップデートでは後方互換性のない変更が多々ある(@deprecated
の削除など)と思われます。
このため、ロードマップやRFCを見て事前に準備しておくのが良いでしょう。