Resource handler returned message: “The runtime parameter of nodejs14.x is no longer supported for creating or updating AWS Lambda functions. We recommend you use the new runtime (nodejs20.x) while creating or updating functions.

a white and yellow flower in a pond of water lilies

AWS CDKでLambdaランタイムのアップグレードエラーを解決する

AWS Cloud Development Kit (CDK)を使用してサーバーレスアプリケーションをデプロイする際に、Lambdaランタイムのバージョンアップによるエラーに遭遇することがあります。本記事では、そのようなエラーの原因と解決策について説明します。

問題の概要

CDKでLambda関数をデプロイしようとしたところ、以下のようなエラーが発生しました。

Resource handler returned message: "The runtime parameter of nodejs14.x is no longer supported for creating or updating AWS Lambda functions. We recommend you use the new runtime (nodejs20.x) while creating or updating functions. (Service: Lambda, Status Code: 400, Request ID: 9xxx)" (RequestToken: e3c5cxxxx, HandlerErrorCode: InvalidRequest)

このエラーは、AWS LambdaがNode.js 14.xランタイムのサポートを終了し、Node.js 20.xへの移行を推奨しているために発生しています。

原因の特定

エラーの原因を特定するために、プロジェクトの依存関係を確認したところ、package.jsonファイルに@aws-cdk/coreなどのCDK v1のパッケージが含まれていました。

"dependencies": {
  "@aws-cdk/core": "^1.x.x",
  // ...
}

CDK v1はNode.js 14.xをデフォルトのランタイムとして使用していたため、これが原因でLambda関数のランタイムがNode.js 14.xになっていたのです。

解決策

この問題を解決するには、以下の手順を実行します。

  1. package.jsonファイルから、CDK v1の古いモジュール(@aws-cdk/coreなど)を削除します。
  2. CDK v2の新しいモジュール(aws-cdk-lib)をpackage.jsonファイルの依存関係に追加します。
"dependencies": {
  "aws-cdk-lib": "^2.x.x",
  // ...
}
  1. CDKのコード内で、@aws-cdk/coreなどの古いモジュールをインポートしている箇所を、aws-cdk-libからのインポートに変更します。
  2. npm installを実行して、更新された依存関係をインストールします。
npm install
  1. CDKアプリケーションを再度合成し、CloudFormationテンプレートを生成します。
cdk synth
  1. 生成されたCloudFormationテンプレートを確認し、Lambda関数のランタイムがNode.js 20.xに更新されていることを確認します。
  2. CDKアプリケーションをデプロイします。
cdk deploy

これで、Lambda関数のランタイムがNode.js 20.xに更新され、エラーが解消されるはずです。

予防策

今回の問題を予防するには、以下の点に注意が必要です。

  1. CDKのバージョンを最新のものに保つ
    • CDKは常に進化しており、新しいバージョンではモジュールの構造や名前が変更されることがあります。定期的にCDKのバージョンを更新することで、最新のベストプラクティスに沿ったアプリケーションを構築できます。
  2. 依存関係を定期的に確認する
    • プロジェクトの依存関係に古いモジュールが含まれていないか、定期的に確認することが重要です。古いモジュールを使用し続けると、セキュリティの問題や非互換性の問題が発生する可能性があります。
  3. AWS公式ドキュメントを参照する
    • AWSのサービスは常に進化しており、サポートされるランタイムやベストプラクティスも変化します。定期的にAWS公式ドキュメントを確認し、最新の情報を把握することが重要です。

まとめ

AWS CDKを使用する際に、古いCDKバージョンの依存関係が含まれていることが原因で、Lambdaランタイムのバージョンアップによるエラーに遭遇することがあります。このようなエラーは、古いモジュールを削除し、新しいモジュールを使用することで解決できます。また、CDKとAWSのサービスの進化に合わせて、定期的にアプリケーションの依存関係を見直すことが重要です。

本記事が、同様の問題に直面した開発者の助けになれば幸いです。