概要
システムの改修要望があったため、コードを修正して1年ぶりにCDKを使用してスタックを作成した際に下記のruntimeエラーがでて詰まったので備忘録。
Resource handler returned message:
"The runtime parameter of python3.6 is no longer supported for creating or updating AWS Lambda functions.
We recommend you use the new runtime (python3.9) while creating or updating functions.
解決方法
先に結論を書くと使用していたツールやmodule群のバージョンが古いことが原因でした。今回の肝はCDKのバージョンはあげたもののpackage.json内のmodule群のバージョンを上げ忘れたことです。なんてことないミスなのですが、エンジニア歴が浅い自分には盲点でした。
CDKのissueでも同様のことが取り上げられてますので詳しく知りたい方はこちらをご覧ください.
(aws-s3-deployment): BucketDeployment creates Lambda function with unsupported runtime #21467
バージョンを上げたツール/module群
- CDK ⇦主にこいつが原因
- package.json内のmodule群
- nodejs
- nvm
エラー前開発環境
AWS C9上で開発
name | バージョン |
---|---|
aws-cdk | v1.171.0 |
nvm | v0.31.1 |
nodejs | v12.20.8 |
ちなみに、CDKのVersion 1はメンテナンスモードに入っているためVersion 2が推奨です。(2023年1月現在)
Migrating to AWS CDK v2
詰まった点① nvmのバージョン管理方法
runtimeエラーだったので、とりあえずnvmにてnodeのv16をいれて、aws-cli/cdkをインストールします。
ここも軽く詰まったのですが、nvmでバージョン管理する場合、npm i -g XXXでインストールされるモジュールたちは各バージョンごとに管理されます。cdk deploy
を行った際のnodeのバージョンで動くcdkのバージョンも違います。
nvm のバージョン | cdkのバージョン | |
---|---|---|
v12.20.8 | → | @v1.171.0 |
v16.8.0 | → | @v2.59.0 |
$ nvm alias default v16
$ node -v
v16.8.0
$ cdk --version
2.59.0 (build b24095d)
アップデートも確認できたのでcdk deploy
でデプロイをすると無事エラーを吐いたままです。
詰まった点② bash -l -cでバージョンが違う
Makefile内のコマンドを確認するとbash -l -c
と見慣れない記述がありました。
deploy:
bash -l -c 'npm install && cdk deploy`
bash -l
コマンドはログイン状態のshellでコマンドを実行する
ここはいまだに理解ができていないのですが、なにやらcdk --version
とbash -l -c 'cdk --version'
では別バージョンになっていたため、cdkのバージョンがアップデートできていなかったようです。
$ cdk --version
2.59.0 (build b24095d)
$ bash -l -c 'cdk --version'
1.171.0
対策方法はいろいろあると思うのですが、今回はログイン状態のShell上でnvmで使用するdefaultを変更することで解決しました。元々のMakefileをいじらないでCDKのバージョンアップは完了です。
$ bash -l -c 'node -v'
v12.20.8
$ bash -l -c 'nvm alias default v16'
$ bash -l -c 'node -v && cdk --version'
v16.8.0
2.59.0 (build b24095d)
詰まった点③ package.json内のmodule群のバージョンを上げ忘れた
ツール類のバージョンアップは完了したのにまだ、runtimeエラーが出ている状況が続いている時に上記のissueを見つけました。issueを参考にpackage.jsonに記載されているmodule群のバージョンを上げてnpm i
したらエラー解消しました。
module | before | after |
---|---|---|
@aws-cdk/assert | 1.101.0 | 2.59.0 |
@types/node | 10.17.27 | 18.11.18 |
aws-cdk | 1.101.0 | 2.60.0 |
ts-node | ^9.0.0 | ^10.9.1 |
typescript | ~3.9.7 | ~4.9.4 |
バージョンアップにはnpm-check-updates
を使用しました。
無事deploy完了です!!
感想
バージョン上げる時に限らず、変更を加えた時nい影響を受ける範囲は考えないといけないなーと思いました。今回のエラーで技術以外にもググり方などかなり学びがあったので、エラーはやはりエンジニアを強くするなと思いました。(issueに感謝!!)