

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Node.js 建置 Lambda 函數
<a name="lambda-nodejs"></a>

您可以在 AWS Lambda中執行具有 Node.js 的 JavaScript 程式碼。Lambda 提供用於執行程式碼來處理事件的 Node.js [執行期](lambda-runtimes.md)。您的程式碼會在包含 的環境中執行 適用於 JavaScript 的 AWS SDK，其中包含您管理之 AWS Identity and Access Management (IAM) 角色的登入資料。若要進一步了解 Node.js 執行時期隨附的 SDK 版本，請參閱 [包含執行時期的 SDK 版本](#nodejs-sdk-included)。

Lambda 支援以下 Node.js 執行期。<a name="nodejs-supported-runtimes"></a>


| Name | 識別符 | 作業系統 | 取代日期 | 封鎖函數建立 | 封鎖函數更新 | 
| --- | --- | --- | --- | --- | --- | 
| 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 日  |  2026 年 9 月 30 日  | 

**若要建立 Node.js 函數**

1. 開啟 [Lambda 主控台](https://console.aws.amazon.com/lambda)。

1. 選擇**建立函數**。

1. 進行下列設定：
   + **函數名稱**：輸入函數名稱。
   + **執行時間**：選擇 **Node.js 24.x。**

1. 選擇**建立函數**。

主控台將建立一個 Lambda 函數，其具有名為 `index.mjs` 的單一來源檔案。您可以使用內建的程式碼編輯器編輯該檔案並加入更多檔案。在 **DEPLOY** 區段中，選擇**部署**以更新函數的程式碼。然後，若要執行程式碼，請在**測試事件**區段中選擇**建立測試事件**。

`index.mjs` 檔案匯出名為 `handler` 的函數，它接受事件物件與內容物件。這就是在叫用函數時，Lambda 呼叫的[處理常式函數](nodejs-handler.md)。Node.js 函數執行期會從 Lambda 中取得調用事件並將它們傳遞至處理常式。在函式組態中，處理常式值為 `index.handler`。

當您儲存函數程式碼時，Lambda 主控台會建立 .zip 封存檔部署套件。當您在主控台之外開發函數程式碼 (使用 IDE) 時，您需要[建立部署套件](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)
+ [在 中檢測 Node.js 程式碼 AWS Lambda](nodejs-tracing.md)

## 包含執行時期的 SDK 版本
<a name="nodejs-sdk-included"></a>

所有[支援的 Lambda Node.js 執行時間](#nodejs-supported-runtimes)都包含 適用於 JavaScript 的 AWS SDK 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"
}
```

如需詳細資訊，請參閱[在處理常式中使用適用於 JavaScript v3 的 SDK](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 開發人員工具部落格[》上的適用於 JavaScript 的模組化 AWS SDK 中的 HTTP 保持連線預設為開啟](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 執行時期版本，Lambda 會自動載入 Amazon 專屬的 CA (憑證授權單位) 憑證，讓您更輕鬆地建立與其他 AWS 服務互動的函數。例如，Lambda 包含在 Amazon RDS 資料庫上安裝的驗證[伺服器身分憑證](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html)所需的 Amazon RDS 憑證。此行為可能會在冷啟動期間產生效能影響。

從 Node.js 20 開始，在預設情況下，Lambda 不再載入額外的 CA 憑證。Node.js 20 執行期包含一個憑證檔案，其中包含所有 Amazon CA 憑證位於 `/var/runtime/ca-cert.pem`。若要從 Node.js 18 及更早版本的執行期還原相同的行為，請將 `NODE_EXTRA_CA_CERTS`[環境變數](configuration-envvars.md)設定為 `/var/runtime/ca-cert.pem`。

為了獲得最佳效能，我們建議您只將需要的憑證與部署套件搭配，並透過 `NODE_EXTRA_CA_CERTS` 環境變數載入憑證。憑證檔案應包含一或多個 PEM 格式的受信任根憑證或中繼 CA 憑證。例如，對於 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 偵測到此覆寫並移除了對應的停用旗標。

**重要**  
 使用實驗性功能可能會導致不穩定性與效能問題。這些功能可能會在未來的 Node.js 版本中變更或移除。使用實驗性功能的函式不符合 Lambda 服務水準協議 (SLA) 或 AWS 支援的資格。