はじめに
Lambda関数のランタイムに設定しているNode.jsのバージョンアップ方法を紹介する。本記事では、例としてNode.js 18以前からNode.js 22への変換のポイントについても併せて紹介する。
【参考】Node.jsのサポート期間
Node.js 18以前のバージョンは、2025年4月でサポート切れとなっている。AWSのLambda関数のランタイムとしてもセキュリティサポートの対象外となるので対応を推奨する。
動作確認環境
- バージョンアップ前
- Node.js 14、16、18
- バージョンアップ後
- Node.js 22
方法
AWSのコンソールを使用する方法を紹介する。
特定のランタイムのLambda関数を抽出
検索欄のフィルタで、ランタイムを特定できる。
今回は、Node.js 14、16、18をランタイムとして利用している関数を抽出するので、以下のように設定する。
Lambda関数のコードの修正
変更したいLambda関数を選択して、「コード」のタブを押す。
「コードソース」からコードを修正する。
コードを修正する前に、バージョンを発行しておくことを推奨する。バージョン発行についてはこちらの記事を参照。
Node.js 14、16からNode.js 22に変更する際のポイントとして以下がある。
- CommonJSからECMAScript(ES Module, ES2015)に変更
- AWS CDKをv3にバージョンアップ
CommonJSからECMAScript(ES Module, ES2015)に変更
Nodeのバージョン18以上のLambdaでは、デフォルトファイルの拡張子がmjsに変更されている。そのため、モジュールのインポート方法を変更し、index.js
ファイルのファイル名をindex.mjs
に変更する。詳細は、こちらの記事を参照。
以下にコード修正の例を示す。
// index.js
const AWS = require('aws-sdk');
exports.handler = async (event) => {
const s3 = new AWS.S3();
const result = await s3.listBuckets().promise();
return {
statusCode: 200,
body: JSON.stringify(result.Buckets),
};
};
上記のコードをNode.js 22で動作するように、ES Moduleスタイルに変更する。
コード修正が完了したら、index.js
のファイル名をindex.mjs
に変更する。
// index.mjs
import { S3 } from 'aws-sdk';
export const handler = async (event) => {
const s3 = new S3();
const result = await s3.listBuckets().promise();
return {
statusCode: 200,
body: JSON.stringify(result.Buckets),
};
};
変更前
変更後
最後に、Deployボタンを押して、コードの修正を反映する。
Lambda関数のランタイムを修正
コードの修正が完了したら、ランタイムを修正する。
変更したいLambda関数「コード」のタブの下の方にある、「ランタイム設定」の「編集」ボタンを押す。
Node.js 22を選択して、保存ボタンを押して完了。
テストなどを実施して正しく動作すれば成功。動作しない場合は、CloudWatchのログを確認すると良い。
「モニタリング」タブから、「CloudWatchログを表示」ボタンを押すとCloudWatchのログを確認できる。詳細はこちらの記事を参照。
まとめ
Lambda関数のランタイムに設定しているNode.jsのバージョンアップ方法を紹介した。例としてNode.js 18以前からNode.js 22への変換のポイントについても併せて紹介した。Node.jsのサポート切れでバージョンアップする際に参考にしてほしい。
参考