AWS CDKをバージョン1からバージョン2へ移行しよう!

ならたけぽん
2022-11-10
2022-11-10

おつかれさまです。ならたけぽんです。🐧

みなさま、AWS Cloud Development Kit(以下、AWS CDK)はお使いですか?
はい。私は調子に乗っていろいろコーディングしています!

え、なんだって?
AWS CDKのバージョンが変わるって? 
バージョン2?
AWS Cloud Development Kit (AWS CDK) v2 の一般提供開始

え、AWS CDKのバージョン1は、フルサポートは2022/06/01まで、
以降はメンテナンスサポートになって、2023/06/01でサポート終了だって?
AWS CDK サポート期限

あぁぁぁァ、調子に乗って作成したあれやこれや、どげんしたらよかと・・・😱

というわけで、今回はAWS CDKを、バージョン1から、バージョン2に移行するお話しです。
こうしなければいけない!というお話しではなくて、
こうやってもできるよ!というお話しになっております。

まず、まっさきに考えました。バージョン1とバージョン2の、あいのり。🚌
CDK Toolkit v2 compatibility

※以下、引用

> If you need to create both v1 and v2 CDK projects,
> do not install CDK Toolkit v2 globally.
> (Remove it if you already have it installed: npm remove -g aws-cdk.)

※以下、日本語訳

 v1とv2の両方のCDKプロジェクトを作成する必要がある場合は、
 CDK Toolkit v2をグローバルにインストールしないでください。
 (すでにインストールされている場合は削除してください:npm remove -g aws-cdk.)

え、そうなの?
両方のバージョンをグローバル設定にできないって、要は、
あ・い・の・り🚌、できないっていうことじゃん・・・
儚くも散った夢。😭

というわけで、AWS CDKのバージョン1を今後もご入用な方は、
バージョン1とバージョン2とでコーディング環境(サーバorPC)自体を変えるか、
上記URL記載のとおり、
npxコマンドでローカルフォルダだけAWS CDK バージョン2にしてください。

私はですか?
めんどいので、グローバルからAWS CDK バージョン2にしちゃいますYO!。
はい、おざっぱ~。🤗

では、まず最初に、AWS CDK バージョン1のコード群をしっかりバックアップします。
バックアップは大事。おおざっぱ~でも大事。というか必須。

次に、おもむろに、AWS CDK バージョン2をグローバルにインストールします。

> npm install -g aws-cdk

removed 204 packages, changed 1 package, and audited 3 packages in 8s

found 0 vulnerabilities

> cdk --version
2.41.0 (build 6ad48a3)
※ 2022/09/09 20:20現在

さらに、いつものとおり、任意の中身が空のフォルダを初期化します。

> cdk init --language typescript

✅ All done!

そして、最後におもむろに、AWS CDK バージョン1のソースコードを持ってきます!

ブログ3_1
はい。エラーで真っ赤っ赤~。。。
やっぱりそうだよね。安直にはいかんよね。。。

では、AWS CDK バージョン2 の公式ページをきちんと見てみましょう。
Your first AWS CDK app

※以下、引用

> import * as cdk from 'aws-cdk-lib';
> import { aws_s3 as s3 } from 'aws-cdk-lib';

バージョン1では「aws-cdk/core」だったライブラリ名が、
バージョン2では「aws-cdk-lib」になってる。。。
ていうか、全部のライブラリが「aws-cdk-lib」パッケージに配下になってる。。。
AWS Cloud Development Kit (AWS CDK) v2 の一般提供開始

※以下、引用

> AWS CDK v2 において AWS Construct ライブラリが aws-cdk-lib という名前で
> 1 つのパッケージに統合され、使用する各 AWS のサービスごとのパッケージを
> ダウンロードする必要がなくなります。

そういうことか。。。

ということで、「aws-cdk-lib」パッケージを参照するように、
AWS CDK バージョン1のコードをバージョン2に変換してみます。
合わせて、エラー群を1つ1つ、つぶしていきます。

例1)

○修正前:


import * as cdk from '@aws-cdk/core';



○修正後:

import * as cdk from 'aws-cdk-lib';
例2)

○修正前:

import {
    ISubnet,
    IVpc,
    Peer,
    Port,
    SecurityGroup,
    Subnet,
    Vpc
} from '@aws-cdk/aws-ec2';



○修正後:

import {
    aws_ec2 as ec2
} from 'aws-cdk-lib';

※コード内で、「ec2.Vpc」と接頭子「ec2」を付与する。
例3)

○修正前:

constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {



○修正後:

constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {

※「cdk.Construct」->「cdk.App」に

ブログ3_2
あぁぁぁァ、エラーが消えた。。。赤いの消えた。。。
やったよ父さん。ボク、やったよ。。。

もっと複雑なソースコードをお持ちのみなさまにおかれましては、
十分な作業時間を確保して、作業いただきますよう。
みなさまにご多幸あらんことを。

ギリギリまでバージョン1で作業するも良し。
エイ、や、と、この段階でバージョン2に切り替えるも良し。

良き良き、AWS CDKライフを!!!🌈