O hirunewani blog

AWS CDK CLIとCDKコンストラクトライブラリのバージョンが一致しなくなった

Created at

aws-cdkとaws-cdk-libはv2.174.0以降バージョンが一致しなくなったことについて。また、有効な組み合わせの判定が困難になったため簡易なリリース日による判定について。

AWS CDK CLIとCDKコンストラクトライブラリの分離

AWS CDK CLI(aws-cdk)とCDKコンストラクトライブラリ(aws-cdk-lib)が同時リリースではなくなったことで、v2.174.0以降バージョンが一致しなくなりました。

https://aws.amazon.com/jp/blogs/news/aws-cdk-is-splitting-construct-library-and-cli/

また、aws-cdkはv2.174.0の次のバージョンがv2.1000.0にスキップされています。

従来のCLIと本体のバージョンによる判定

aws-cdkaws-cdk-libは、バージョンをある程度合わせて利用しないとエラーが出ていました。

具体的には、aws-cdkのバージョンがaws-cdk-libのバージョン以上である必要がありました。

この形式では、見れば簡単に判定できるため、あまり問題になることはなかったように思います。

新しいCLIと本体のリリース日による判定

v2.174.0以降は、aws-cdkaws-cdk-libのリリース日基準で合わせる必要があります。

具体的には、aws-cdkのリリース日がaws-cdk-libのリリース日と同じか、より新しい必要があります。

新しい形式では、従来の形式と異なり見るだけでは判定が困難です。

代わりに、GitHubに互換性情報を掲載することに加えて、cdk.outに必要最小限のCLIバージョンを出力すると記載されていますが確認しやすいとは言えません。

簡単にリリース日を比較する

npmなどでは次のようなコマンドで、パッケージのリリース日を取得できます。

npm view aws-cdk time.created

これを利用すると、次のようにリリース日を比較するスクリプトを作成できます。

aws_cdk_release=$(npm view aws-cdk time.created)

aws_cdk_lib_release=$(npm view aws-cdk-lib time.created)

if [[ "$aws_cdk_release" < "$aws_cdk_lib_release" ]]; then
  echo "Error: aws-cdk release date ($aws_cdk_release) is older than aws-cdk-lib release date ($aws_cdk_lib_release)" >&2
    exit 1
fi

ただし、今後メジャーアップデートやセキュリティなどの問題により非推奨なバージョンが発生するとリリース日以外の内容も考慮する必要が出てくると思われるため、安全に倒すのであればcdk synthを実行するようにした方がいいでしょう。