LoginSignup
5
1

More than 1 year has passed since last update.

既存のCDKプロジェクトをCDK v2.0 に移行する

Last updated at Posted at 2020-12-12

この情報は古いです。最新の手順はこちらを参照してください:
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"
  }
}

変更点は下記です:

  1. @aws-cdk/assert を削除
  2. @aws-cdk/* を削除
  3. aws-cdk のバージョンをalpha版に書き換え
  4. aws-cdk-lib, constructs を追加

aws-cdk-lib ライブラリ が、今まで個別にインストールしていたパッケージが集約されたものです。
今後は使うサービスが増える度に package.json を書き換える必要がなくなりますね。

constructs ライブラリ は、CDK v2.0から明示的にインストールすることが必要になるようでした。
(これまでは各モジュールの依存になっており、別々にインストールされていたようです)

@aws-cdk/assert ライブラリ はCDKのテスト用ライブラリでしたが、v2.0版は用意されていないようです。
サンプルでもjestの関数を多用するような形に書き換えられていました。
今後のCDKテストベストプラクティスはまた探っていければと思います。

パッケージのimport方法

合わせて、パッケージをimportする書き方も変わります。
下記はTypeScriptの例です。

下記の順番で機械的に置換すれば良さそうです:

  1. @aws-cdk/coreaws-cdk-lib
  2. @aws-cdkaws-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系のつらみを解消してくれる点も多いので、ぜひ乗り換えたいですね。

※ ただしsemvarの規則の通り、メジャーアップデートでは後方互換性のない変更が多々ある(@deprecated の削除など)と思われます。
このため、ロードマップやRFCを見て事前に準備しておくのが良いでしょう。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1