AWS CDK v1とv2備忘録
仕事でAWSを使用しており、AWS CDKを触る機会があったので、メモ書き程度に残しておきます。
AWS CDKのv1で構成されたファイルをv2に書き換える作業をしてました。
そも論v1だのv2だの何やそれ
AWS CDK(Cloud Development Kit)のv2登場が2021年の年末に発表。2022年6月にはフルサポートが終了し、2023年6月にはメンテナンスサポートも終了する流れに。v1で構成されたテストファイルを諸用で本番環境に応用することになり、v2に書き換えた上で問題なくデプロイ出来るように構成する要望が来たのでやりました。
たまにCLIと混合する人多いですが、これはCDKの話です。CloudFormationの方ね。
やったこと
npmでAWS CDKのv2をインスコするのは前提なのでパス。今回はファイルの書き方的なところにフォーカスを置きます。
・importの部分の違い
ファイルの頭にあるimport文を変更します。多分ここが一番大きい違いなのかな。
#v1の場合 import * as s3 from '@aws-cdk/aws-s3' import * as cloudfront from '@aws-cdk/aws-cloudfront' import * as iam from '@aws-cdk/aws-iam' import * as cdk from '@aws-cdk/core'
例えば、こんな感じにs3だろcloudfrontだのを読み込んでるファイルが存在するとします。v1では各サービス毎にパッケージが分かれており、使いたいサービスのパッケージを1つ1つ指定しないといけませんでした。新しいサービスを追加するときに一々npm install
とかpip install
しないといけないというクソめんどくさい仕様でしたが、aws-cdk-lib
という一つのパッケージにまとめられ、これ1つですべてのAWS Construct Libraryにアクセスできるようになったので少し扱いやすくなりました。
#v2の場合 import { Construct } from 'constructs';#Constructを指定する文を追加 import * as cdk from 'aws-cdk-lib';#cdkだけ直接指定しないとエラー出た。なんでや。 import { aws_iam as iam, aws_s3 as s3, aws_cloudfront as cloudfront } from 'aws-cdk-lib'; #@aws-cdkからaws-cdk-libに変更
v2で上にあるv1と全く同じ内容の文章を作成しました。v1の方ではいちいち”@aws-cdk/hogehoge”と指定していましたが、v2では使用するサービスを一括指定して、全部書き終えた上で”from ‘aws-cdk-lib’;”と指定しています。要はv2からcoreモジュールを利用しなくなったわけですな。こっちの方が見た目も綺麗ですね。
ただいくつか注意しないといけないものがあり、”cdk”だけimportで別に指定しないといけないみたいです。よーく分からんわ。
あと”Construct”の部分も別途必要でして、一応ここで気をつけるべき点はこの2点かと思います。ここもv1では”core.Construct”でしたが、先述通りcoreモジュールを利用しなくなったので、ConstructだけでOKになりました。
・Feature Flag
v1で導入されていたFeature flagがv2ですべてのFeature flagsが有効になりました。v1からv2に移行する時は、cdk diffで影響範囲や差分を確認することを最優先にやった方がいいと思います。
・deprecated APIが使えなくなった
importの部分からご覧の通りガラッと変わったので、deprecated APIも使えなくなりました。てか今まで”depricated”(非推奨)だけど”非推奨”なだけで使い続けられていたという…確かに”禁止”ではないから…別にええんやな…
しかしこれがv2で非推奨から完全に使えなくなったので、メソッドとかで悩むようなケースは減るのではないかと思います。(v1でこのAPIを使っている場合はコードを書き換えないといけませんが)
・書き換えた感想
書き換え作業自体は大きく変更した点はimportの部分しかないのでさほど時間はかかりませんでした。基本的にVistual Studio Codeで作業してるのですが、コンフリクトが発生した部分も、あまりなかったかな。
AWS CDKこれだけ聞くとすげー便利になった感ありますが、結局CloudFormationに依存しているので、エラー発生時の原因の特定がしづらいです。エラーが分かりづらい。CloudFormationの方もどうにかしてくれ。