Node.js による Lambda 関数の構築
AWS Lambda の Node.js を使用して JavaScript コードを実行できます。Lambda は Node.js のランタイムを指定して、イベントを処理するコードを実行します。コードは、管理している AWS Identity and Access Management (IAM) ロールの認証情報を使用して、AWS SDK for JavaScript を含む環境で実行されます。Node.js ランタイムに含まれている SDK バージョンの詳細については、「ランタイムに含まれる SDK バージョン」を参照してください。
Lambda は、以下の Node.js ランタイムをサポートしています。
| 名前 | 識別子 | オペレーティングシステム | 廃止日 | 関数の作成をブロックする | 関数の更新をブロックする |
|---|---|---|---|---|---|
|
Node.js 24 |
|
Amazon Linux 2023 |
2028 年 4 月 30 日 |
2028 年 6 月 1 日 |
2028 年 7 月 1 日 |
|
Node.js 22 |
|
Amazon Linux 2023 |
2027 年 4 月 30 日 |
2027 年 6 月 1 日 |
2027 年 7 月 1 日 |
|
Node.js 20 |
|
Amazon Linux 2023 |
2026 年 4 月 30 日 |
2026 年 6 月 1 日 |
2026 年 7 月 1 日 |
Node.js 関数を作成するには
-
Lambda コンソール
を開きます。 -
[Create function] (関数の作成) をクリックします。
-
以下の設定を行います。
-
[関数名]: 関数名を入力します。
-
[ランタイム]: [Node.js 24.x] を選択します。
-
-
[関数の作成] を選択してください。
コンソールで、index.mjs という名前の単一のソースファイルを含む Lambda 関数が作成されます。このファイルを編集し、組み込みのコードエディタでファイルをさらに追加することができます。[DEPLOY] セクションで [デプロイ] を選択して関数のコードを更新します。次に、コードを実行するには、[TEST EVENTS] セクションで [テストイベントを作成] を選択します。
index.mjs ファイルは、イベントオブジェクトおよびコンテキストオブジェクトを取得する handler という名前の関数をエクスポートします。これは、関数が呼び出されるときに Lambda が呼び出すハンドラー関数です。Node.js 関数のランタイムは、Lambda から呼び出しイベントを取得し、ハンドラに渡します。関数設定で、ハンドラ値は index.handler です。
関数コードを保存すると、Lambda コンソールは .zip ファイルアーカイブのデプロイパッケージを作成します。コンソール外で (SDE を使用して) 関数コードを開発するときは、デプロイパッケージを作成して、Lambda 関数にコードをアップロードします。
関数のランタイムによって、呼び出しイベントに加えて、コンテキストオブジェクトがハンドラに渡されます。コンテキストオブジェクトには、呼び出し、関数、および実行環境に関する追加情報が含まれます。詳細情報は、環境変数から入手できます。
Lambda 関数には CloudWatch Logs ロググループが付属しています。関数のランタイムは、各呼び出しに関する詳細を CloudWatch Logs に送信します。これは呼び出し時に、任意の関数が出力するログを中継します。関数がエラーを返す場合、Lambda はエラー形式を整え、それを呼び出し元に返します。
トピック
ランタイムに含まれる SDK バージョン
すべてのサポートされている Lambda Node.js ランタイムには、AWS SDK for JavaScript v3 の最新バージョン
例 index.mjs
import packageJson from '@aws-sdk/client-s3/package.json' with { type: 'json' }; export const handler = async () => ({ version: packageJson.version });
これにより、次の形式で応答が返されます。
{ "version": "3.632.0" }
詳細については、「ハンドラーでの SDK for JavaScript v3 の使用」を参照してください。
TCP 接続にキープアライブを使用
デフォルトの Node.js HTTP/HTTPS エージェントは新しいリクエストがあるたびに新しい TCP 接続を作成します。新しい接続を確立するコストが発生しないように、キープアライブはサポートされた Node.js ランタイムのすべてで、デフォルトで有効になっています。キープアライブは、SDK を使用して複数の API コールを行う Lambda 関数のリクエスト時間を短縮することができます。
キープアライブを無効にするには、「AWS SDK for JavaScript 3.x デベロッパーガイド」の「Node.js のキープアライブによる接続の再利用」を参照してください。キープアライブの使用の詳細については、AWS 開発者ツールブログの「HTTP キープアライブはモジュラー AWS SDK for JavaScript でデフォルトでオンになっています
CA 証明書のロード
Node.js 18 までのバージョンの Node.js ランタイムでは、他の AWS のサービスと相互作用する関数を簡単に作成できるように、Lambda が Amazon 固有の CA (認証局) 証明書を自動的にロードします。例えば、Lambda には、Amazon RDS データベースにインストールされているサーバー ID 証明書を検証するために必要な Amazon RDS 証明書が含まれています。この動作は、コールドスタート時のパフォーマンスに影響を与える可能性があります。
Node.js 20 以降では、Lambda がデフォルトで追加の CA 証明書をロードすることはありません。Node.js 20 ランタイムには、/var/runtime/ca-cert.pem にあるすべての Amazon CA 証明書を含む証明書ファイルが含まれています。Node.js 18 以前のランタイムと同じ動作を復元するには、NODE_EXTRA_CA_CERTS 環境変数を /var/runtime/ca-cert.pem に設定します。
最適なパフォーマンスを得るには、必要な証明書のみをデプロイパッケージにバンドルし、NODE_EXTRA_CA_CERTS 環境変数を使用してロードすることをお勧めします。証明書ファイルには、1 つ以上の信頼できるルート CA 証明書または中間 CA 証明書が PEM 形式で含まれている必要があります。例えば RDS の場合は、必要な証明書をコードと共に certificates/rds.pem として含めてください。次に、NODE_EXTRA_CA_CERTS を /var/task/certificates/rds.pem に設定して証明書をロードします。
実験的 Node.js 機能
アップストリームの Node.js 言語リリースでは、デフォルトで実験的な機能が有効になります。Lambda は、ランタイムの安定性と一貫したパフォーマンスを確保するために、これらの機能を無効にします。次の表は、Lambda が無効にする実験的な機能を示します。
| 実験機能 | サポートされている Node.js バージョン | Lambda によって適用される Node.js フラグ | 再有効化する Lambda フラグ |
|---|---|---|---|
|
ES モジュールでの require を使用したモジュールのインポートのサポート |
Node.js 20、Node.js 22 |
|
|
|
ES モジュールと CommonJS モジュールの自動検出のサポート |
Node.js 22 |
|
|
無効な実験機能を有効にするには、NODE_OPTIONS 環境変数で再有効化フラグを設定します。例えば、ES モジュールの require サポートを有効にするには、NODE_OPTIONS を --experimental-require-module に設定します。Lambda はこのオーバーライドを検出し、対応する disable フラグを削除します。
重要
実験的な機能を使用すると、不安定さやパフォーマンスの問題が発生する可能性があります。これらの機能は、今後の Node.js バージョンで変更または削除される可能性があります。実験的な機能を使用する関数は、Lambda サービスレベルアグリーメント (SLA) または AWS サポート の対象外です。