選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

使用 Node.js 建置 Lambda 函數

焦點模式
使用 Node.js 建置 Lambda 函數 - AWS Lambda

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

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

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

Lambda 支援以下 Node.js 執行期。

名稱 識別符 作業系統 取代日期 封鎖函數建立 封鎖函數更新

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 年 6 月 1 日

2026 年 7 月 1 日

Node.js 18

nodejs18.x

Amazon Linux 2

2025 年 9 月 1 日

2025 年 10 月 1 日

2025 年 11 月 1 日

若要建立 Node.js 函數
  1. 開啟 Lambda 主控台

  2. 選擇 Create function (建立函數)

  3. 進行下列設定:

    • 函數名稱:輸入函數名稱。

    • 執行時期:選擇 Node.js 22.x

  4. 選擇 Create function (建立函數)

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

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

當您儲存函數程式碼時,Lambda 主控台會建立 .zip 封存檔部署套件。當您在主控台之外開發函數程式碼 (使用 IDE) 時,您需要建立部署套件將您的程式碼上傳到 Lambda 函數。

除了傳遞調用事件外,函式執行期還會傳遞內容物件至處理常式。內容物件包含了有關調用、函式以及執行環境的額外資訊。更多詳細資訊將另由環境變數提供。

Lambda 函數隨附有 CloudWatch Logs 記錄群組。函數執行期會將每次調用的詳細資訊傳送至 CloudWatch Logs。它在調用期間會轉送您的函數輸出的任何記錄。如果您的函數傳回錯誤,Lambda 會對該錯誤進行格式化之後傳回給調用端。

Node.js 初始化

Node.js 有一個唯一的事件迴圈模型,導致其初始化行為與其他執行期不同。具體而言,Node.js 使用支援異步操作的非阻塞 I/O 模型。此模型允許 Node.js 高效地執行大多數工作負載。例如,如果 Node.js 函數進行網路呼叫,則該請求可能被指定為異步操作並放入回呼佇列中。函數可能會繼續處理主呼叫堆疊中的其他操作,而不會透過等待網路呼叫返回而被阻止。網路呼叫完成後,系統會執行其回呼,然後從回呼佇列中移除。

某些初始化任務可異步執行。不能保證這些異步任務在調用之前完成執行。例如,在 Lambda 執行處理常式函數時,從 AWS 參數存放區進行網路呼叫以擷取參數的程式碼可能尚未完成。因此,在調用期間,變數可能為空。為避免這種情況,請務必在繼續執行其餘的函數核心商業邏輯之前,將變數和其他非同步程式碼完全初始化。

或者,您可以將函數程式碼指定為 ES 模組,這樣便能使用位於檔案最上層的 await,超出了函數處理常式的範圍。當您對每個 Promise 執行 await,非同步初始化程式碼會在處理常式調用之前完成,從而在降低冷啟動延遲方面最大限度地提高佈建並行的效率。如需詳細資訊和範例,請參閱在 AWS Lambda中使用 Node.js ES 模組和頂層 await

將函數處理常式指定為 ES 模組

預設情況下,Lambda 會將帶有 .js 尾碼的檔案視為 CommonJS 模組。您可以選擇將程式碼指定為 ES 模組。您可利用兩種方式進行:在函數的 package.json 檔案中將 type 指定為 module,或使用 .mjs 副檔名。若使用第一種方式下,函數程式碼會將所有 .js 檔案視為 ES 模組,而在第二種情況下,只有您使用 .mjs 指定的檔案為 ES 模組。您可以透過分別將它們命名為 .mjs.cjs 來混合 ES 模組和 CommonJS 模組,因為 .mjs 檔案一律為 ES 模組,而 .cjs 檔案一律為 CommonJS 模組。

當載入 ES 模組時,Lambda 會在 NODE_PATH 環境變數中搜尋資料夾。您可以使用 ES 模組import陳述式載入執行時間中包含的 AWS SDK。您也可以從分層載入 ES 模組。

包含執行時期的 SDK 版本

Node.js 執行時間中包含的 AWS SDK 版本取決於執行時間版本和您的 AWS 區域。若要尋找您使用的執行時期中包含的 SDK 版本,請使用下列程式碼建立 Lambda 函數。

範例 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" }

使用保持連線保持 TCP 連線

預設 Node.js HTTP/HTTPS 代理程式會為每個新的請求建立新的 TCP 連線。為了避免建立新連線的成本,在 nodejs18.x 和更新版本的 Lambda 執行時期中預設會啟用保持連線。保持連線可以減少使用 SDK 進行多次 API 呼叫的 Lambda 函數的請求次數。

若要停用保持連線,請參閱《AWS  SDK for JavaScript 3.x 版本開發人員指南》中的在 Node.js 中透過保持連線重複使用連線。如需使用保持連線的詳細資訊,請參閱 AWS 開發人員工具部落格上的適用於 JavaScript 的模組化 AWS SDK 中的 HTTP 保持連線預設為開啟

CA 憑證載入

對於 Node.js 18 以下的 Node.js 執行時期版本,Lambda 會自動載入 Amazon 專屬的 CA (憑證授權單位) 憑證,讓您更輕鬆地建立與其他 AWS 服務互動的函數。例如,Lambda 包含在 Amazon RDS 資料庫上安裝的驗證伺服器身分憑證所需的 Amazon RDS 憑證。此行為可能會在冷啟動期間產生效能影響。

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

為了獲得最佳效能,我們建議您只將需要的憑證與部署套件搭配,並透過 NODE_EXTRA_CA_CERTS 環境變數載入憑證。憑證檔案應包含一或多個 PEM 格式的受信任根憑證或中繼 CA 憑證。例如,對於 RDS,請在程式碼旁包含所需的憑證做為 certificates/rds.pem。然後,藉由將 NODE_EXTRA_CA_CERTS 設定為 /var/task/certificates/rds.pem 載入憑證。

下一個主題:

處理常式

上一個主題:

監控並行
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。