CDK コマンドを実行すると”This CDK CLI is not compatible with the CDK library used by your application.”というエラーが発生するようになったので対処してみた

2023.07.30

こんにちは、CX事業本部 Delivery部の若槻です。

今回は、CDK コマンドを実行するとThis CDK CLI is not compatible with the CDK library used by your application.というエラーが発生するようになったので対処した話です。

事象

CDK プロジェクトでモジュールを最新バージョン(v2.89.0)にアップグレードしました。

npm i aws-cdk aws-cdk-lib

またグローバルでも CDK コマンドを最新バージョン(v2.89.0)にアップグレードしました。

npm install -g aws-cdk

しかし、CDK コマンドを実行すると以下のエラーが発生し、コマンドが実行できなくなりました。

$ cdk synth
This CDK CLI is not compatible with the CDK library used by your application. Please upgrade the CLI to the latest version.
(Cloud assembly schema version mismatch: Maximum schema version supported is 32.0.0, but found 33.0.0)

調査、原因

プロジェクト内の CDK モジュールのバージョンを確認すると、v2.89.0 になっていました。

$ npm ls aws-cdk
cdk_sample_app@0.1.0 /Users/wakatsuki.ryuta/projects/cm-rwakatsuki/cdk_sample_app
└── aws-cdk@2.89.0

$ npm ls -g
/Users/wakatsuki.ryuta/.nvm/versions/node/v18.17.0/lib
├── aws-cdk@2.89.0
├── corepack@0.18.0
└── npm@9.5.1

一方で、CDK コマンドでバージョンを確認すると、アップグレード前のバージョン(v2.88.0)になっていました。

$ cdk --version
2.88.0 (build 5d497f9)
$ cdk -g --version
2.88.0 (build 5d497f9)

システム上のすべての CDK コマンドを探してみると、2箇所にインストールされていました。

$ which -a cdk

/Users/wakatsuki.ryuta/.nvm/versions/node/v18.17.0/bin/cdk
/Users/wakatsuki.ryuta/.npm-global/bin/cdk

現在使われている Node.js バージョンは v18.17.0 です。先程確認した2つのパスのうち、前者の NVM(Node Pachage Manager)で管理している方が使用されているようです。

$ nvm current
v18.17.0

一方で CDK コマンドが使われているパスは、後者の .npm-global で管理している方でした。

which cdk
/Users/wakatsuki.ryuta/.npm-global/bin/cdk

それぞれの CDK バージョンを確認するとバージョンに齟齬があることが分かります。

$  /Users/wakatsuki.ryuta/.npm-global/bin/cdk --version
2.88.0 (build 5d497f9)
$  /Users/wakatsuki.ryuta/.nvm/versions/node/v18.17.0/bin/cdk --version
2.89.0 (build 2ad6683)

最近、NVM を使って Node バージョンのメジャーアップデートを行ったため、それにより使用される Node のパスが npm は新しくなり、CDK コマンドは古いままになっていたことが原因のようです。

対処、解決

.npm-global で管理している古い方のパスを削除して、現在のシェルセッションで指定したパスを使用して Node.js を選択するように強制します。

$ nvm use --delete-prefix /Users/wakatsuki.ryuta/.npm-global
N/A: version "/Users/wakatsuki.ryuta/.npm-global" is not yet installed.

You need to run nvm install /Users/wakatsuki.ryuta/.npm-global to install and use it.

これにより CDK コマンドが使われているパスを NVM で管理している方に変更できました。

$ cdk --version 
2.89.0 (build 2ad6683)

以降は問題なく CDK コマンドが実行できるようになりました。

おわりに

CDK コマンドを実行するとThis CDK CLI is not compatible with the CDK library used by your application.というエラーが発生するようになったので対処した話でした。

システム上の Node.js のバージョンをメジャーアップデートした直後は発生せず、CDK パッケージをアップグレードしようとした際に発生したので、はじめは CDK コマンドのバグを疑ってしまいました。ちゃんとコマンドが使用するパス含めて切り替えをするべきでした。

以上