LoginSignup
5
0

More than 1 year has passed since last update.

C9環境で1年越しにaws-cdkを使用したらスタック作成時にruntimeエラーで詰まった

Last updated at Posted at 2023-01-16

概要

システムの改修要望があったため、コードを修正して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 --versionbash -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に感謝!!)

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0