

# Node.js による Lambda 関数の構築
<a name="lambda-nodejs"></a>

AWS Lambda の Node.js を使用して JavaScript コードを実行できます。Lambda は Node.js の[ランタイム](lambda-runtimes.md)を指定して、イベントを処理するコードを実行します。コードは、管理している AWS Identity and Access Management (IAM) ロールの認証情報を使用して、AWS SDK for JavaScript を含む環境で実行されます。Node.js ランタイムに含まれている SDK バージョンの詳細については、「[ランタイムに含まれる SDK バージョン](#nodejs-sdk-included)」を参照してください。

Lambda は、以下の Node.js ランタイムをサポートしています。<a name="nodejs-supported-runtimes"></a>


| 名前 | 識別子 | オペレーティングシステム | 廃止日 | 関数の作成をブロックする | 関数の更新をブロックする | 
| --- | --- | --- | --- | --- | --- | 
| Node.js 24 | `nodejs24.x` | Amazon Linux 2023 |  2028 年 4 月 30 日  |  2028 年 6 月 1 日  |  2028 年 7 月 1 日  | 
| Node.js 22 | `nodejs22.x` | Amazon Linux 2023 |  2027 年 4 月 30 日  |  2027 年 6 月 1 日  |  2027 年 7 月 1 日  | 
| Node.js 20 | `nodejs20.x` | Amazon Linux 2023 |  2026 年 4 月 30 日  |  2026 年 8 月 31 日  |  Sep 30, 2026  | 

**Node.js 関数を作成するには**

1. [Lambda コンソール](https://console.aws.amazon.com/lambda)を開きます。

1. [**Create function**] (関数の作成) をクリックします。

1. 以下の設定を行います。
   + **[関数名]**: 関数名を入力します。
   + **[ランタイム]**: **[Node.js 24.x]** を選択します。

1. [**関数の作成**] を選択してください。

コンソールで、`index.mjs` という名前の単一のソースファイルを含む Lambda 関数が作成されます。このファイルを編集し、組み込みのコードエディタでファイルをさらに追加することができます。**[DEPLOY]** セクションで **[デプロイ]** を選択して関数のコードを更新します。次に、コードを実行するには、**[TEST EVENTS]** セクションで **[テストイベントを作成]** を選択します。

`index.mjs` ファイルは、イベントオブジェクトおよびコンテキストオブジェクトを取得する `handler` という名前の関数をエクスポートします。これは、関数が呼び出されるときに Lambda が呼び出す[ハンドラー関数](nodejs-handler.md)です。Node.js 関数のランタイムは、Lambda から呼び出しイベントを取得し、ハンドラに渡します。関数設定で、ハンドラ値は `index.handler` です。

関数コードを保存すると、Lambda コンソールは .zip ファイルアーカイブのデプロイパッケージを作成します。コンソール外で (SDE を使用して) 関数コードを開発するときは、[デプロイパッケージを作成](nodejs-package.md)して、Lambda 関数にコードをアップロードします。

関数のランタイムによって、呼び出しイベントに加えて、コンテキストオブジェクトがハンドラに渡されます。[コンテキストオブジェクト](nodejs-context.md)には、呼び出し、関数、および実行環境に関する追加情報が含まれます。詳細情報は、環境変数から入手できます。

Lambda 関数には CloudWatch Logs ロググループが付属しています。関数のランタイムは、各呼び出しに関する詳細を CloudWatch Logs に送信します。これは呼び出し時に、任意の[関数が出力するログ](nodejs-logging.md)を中継します。関数がエラーを返す場合、Lambda はエラー形式を整え、それを呼び出し元に返します。

**Topics**
+ [ランタイムに含まれる SDK バージョン](#nodejs-sdk-included)
+ [TCP 接続にキープアライブを使用](#nodejs-keep-alive)
+ [CA 証明書のロード](#nodejs-certificate-loading)
+ [実験的 Node.js 機能](#nodejs-experimental-features)
+ [Node.js の Lambda 関数ハンドラーの定義](nodejs-handler.md)
+ [.zip ファイルアーカイブで Node.js Lambda 関数をデプロイする](nodejs-package.md)
+ [Node.js Lambda 関数をコンテナイメージとともにデプロイする](nodejs-image.md)
+ [Node.js Lambda 関数のレイヤーを操作する](nodejs-layers.md)
+ [Lambda コンテキストオブジェクトを使用して Node.js 関数の情報を取得する](nodejs-context.md)
+ [Node.js Lambda 関数のログ記録とモニタリング](nodejs-logging.md)
+ [AWS Lambda での Node.js コードの作成](nodejs-tracing.md)

## ランタイムに含まれる SDK バージョン
<a name="nodejs-sdk-included"></a>

すべての[サポートされている Lambda Node.js ランタイム](#nodejs-supported-runtimes)には、AWS SDK for JavaScript v3 の[最新バージョン](https://github.com/aws/aws-sdk-js-v3/releases)ではなく、特定のマイナーバージョンが含まれています。ランタイムに含まれる特定のマイナーバージョンは、AWS リージョン のランタイムバージョンによって異なります。使用しているランタイムに含まれている SDK の特定のバージョンを確認するには、次のコードを使用して Lambda 関数を作成します。

**Example 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 の使用](nodejs-handler.md#nodejs-example-sdk-usage)」を参照してください。

## TCP 接続にキープアライブを使用
<a name="nodejs-keep-alive"></a>

デフォルトの Node.js HTTP/HTTPS エージェントは新しいリクエストがあるたびに新しい TCP 接続を作成します。新しい接続を確立するコストが発生しないように、キープアライブは[サポートされた Node.js ランタイム](#nodejs-supported-runtimes)のすべてで、デフォルトで有効になっています。キープアライブは、SDK を使用して複数の API コールを行う Lambda 関数のリクエスト時間を短縮することができます。

キープアライブを無効にするには、「*AWS SDK for JavaScript 3.x デベロッパーガイド*」の「[Node.js のキープアライブによる接続の再利用](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/node-reusing-connections.html)」を参照してください。キープアライブの使用の詳細については、AWS 開発者ツールブログの「[HTTP キープアライブはモジュラー AWS SDK for JavaScript でデフォルトでオンになっています](https://aws.amazon.com/blogs/developer/http-keep-alive-is-on-by-default-in-modular-aws-sdk-for-javascript/)」を参照してください。

## CA 証明書のロード
<a name="nodejs-certificate-loading"></a>

Node.js 18 までのバージョンの Node.js ランタイムでは、他の AWS のサービスと相互作用する関数を簡単に作成できるように、Lambda が Amazon 固有の CA (認証局) 証明書を自動的にロードします。例えば、Lambda には、Amazon RDS データベースにインストールされている[サーバー ID 証明書](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html)を検証するために必要な Amazon RDS 証明書が含まれています。この動作は、コールドスタート時のパフォーマンスに影響を与える可能性があります。

Node.js 20 以降では、Lambda がデフォルトで追加の CA 証明書をロードすることはありません。Node.js 20 ランタイムには、`/var/runtime/ca-cert.pem` にあるすべての Amazon CA 証明書を含む証明書ファイルが含まれています。Node.js 18 以前のランタイムと同じ動作を復元するには、`NODE_EXTRA_CA_CERTS` [環境変数](configuration-envvars.md)を `/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 機能
<a name="nodejs-experimental-features"></a>

アップストリームの Node.js 言語リリースでは、デフォルトで実験的な機能が有効になります。Lambda は、ランタイムの安定性と一貫したパフォーマンスを確保するために、これらの機能を無効にします。次の表は、Lambda が無効にする実験的な機能を示します。


| 実験機能 | サポートされている Node.js バージョン | Lambda によって適用される Node.js フラグ | 再有効化する Lambda フラグ | 
| --- | --- | --- | --- | 
| ES モジュールでの require を使用したモジュールのインポートのサポート | Node.js 20、Node.js 22 | `--no-experimental-require-module` | `--experimental-require-module` | 
| ES モジュールと CommonJS モジュールの自動検出のサポート | Node.js 22 | `--no-experimental-detect-module` | `--experimental-detect-module` | 

無効な実験機能を有効にするには、`NODE_OPTIONS` 環境変数で再有効化フラグを設定します。例えば、ES モジュールの require サポートを有効にするには、`NODE_OPTIONS` を `--experimental-require-module` に設定します。Lambda はこのオーバーライドを検出し、対応する disable フラグを削除します。

**重要**  
 実験的な機能を使用すると、不安定さやパフォーマンスの問題が発生する可能性があります。これらの機能は、今後の Node.js バージョンで変更または削除される可能性があります。実験的な機能を使用する関数は、Lambda サービスレベルアグリーメント (SLA) または AWS サポート の対象外です。