本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以在 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 |
|
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 18 |
|
Amazon Linux 2 |
2025 年 9 月 1 日 |
2025 年 10 月 1 日 |
2025 年 11 月 1 日 |
若要建立 Node.js 函數
-
開啟 Lambda 主控台
。 -
選擇 Create function (建立函數)。
-
進行下列設定:
-
函數名稱:輸入函數名稱。
-
執行時期:選擇 Node.js 22.x。
-
-
選擇 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
載入憑證。