View a markdown version of this page

Lambda Web 函數執行時間 - AWS Lambda

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

Lambda Web 函數執行時間

Lambda Web Functions 會使用受管執行時間來執行您的 HTTP 伺服器程式碼。您的應用程式必須啟動 HTTP 伺服器,以監聽AWS_LAMBDA_HTTP_ENDPOINT環境變數指定的主機和連接埠。Lambda Web Functions 目前支援 Node.js。根據預設,執行時間index.js會在部署套件的根目錄載入。若要使用不同的項目檔案,請設定 AWS_LAMBDA_NODEJS_ENTRYPOINT 環境變數。如需詳細資訊,請參閱環境變數。

支援的 Node.js 版本

執行時間識別符 Node.js 版本 狀態
nodejs24.x Node.js 24 支援

當您建立修訂時,請在 runtimeConfig區段中指定執行時間識別符。例如:

"runtimeConfig": { "runtime": "nodejs24.x" }

nodejs24.x Web 函數執行時間會遵循與對應 Lambda 事件函數執行時間相同的棄用週期。如需棄用日期和棄用程序,請參閱 執行期淘汰政策。

自動執行階段修補

Lambda 會自動使用安全性更新和錯誤修正來修補Node.js執行時間。修補適用於基礎執行期層,不會變更您的應用程式程式碼。修訂版的runtime識別符 (例如 nodejs24.x) 一律會解析為該主要執行時間的最新修補版本。

注意

Web Functions 不支援執行期管理控制項。您無法鎖定特定修補程式版本或停用自動修補。Lambda 一律使用您指定的執行時間的最新修補版本。

如需 Lambda 如何管理執行期更新的詳細資訊,請參閱 了解 Lambda 如何管理執行時期版本更新。

支援的 Web 架構

您可以使用啟動 HTTP 伺服器的任何 Node.js Web 架構。熱門架構包括:

  • Express

  • Next.js

  • Fastify

  • Koa

您不需要 AWS Lambda Web Adapter或其他event-to-HTTP轉接器。您的應用程式會直接使用架構的標準路由和中介軟體來處理 HTTP 請求。有些架構,例如Next.js在獨立模式中,會讀取接聽地址的自有環境變數。對於這些架構,請在啟動伺服器AWS_LAMBDA_HTTP_ENDPOINT之前,使用從 設定這些變數的 index.js 項目檔案。如需詳細資訊,請參閱環境變數。如需完整的應用程式,請參閱 最少Express的應用程式。

Node.js 執行模型

Node.js 使用事件驅動的執行模型。根據預設, 會在單一主執行緒上執行 Node.js JavaScript 程式碼,而 I/O 操作 (網路呼叫、檔案系統存取) 是非封鎖和事件驅動的。如果需要,您的應用程式可以使用 worker_threads模組建立其他執行緒。此模型對 Web 函數有重要的影響:

透過非同步 I/O 並行

您的伺服器會使用非同步操作 (async/await、Promises、回呼) 來處理多個並行請求。當一個請求等待資料庫回應時,事件迴圈會提供其他請求。這就是為什麼 Web Functions 可以在單一環境中處理許多並行請求,而不需要多個執行緒。

避免封鎖事件迴圈

CPU 密集型同步操作 (大型 JSON 剖析、複雜運算、同步檔案讀取) 會封鎖事件迴圈,並防止處理所有其他請求。如果您的應用程式執行 CPU 繁重的工作,請將其卸載至工作者執行緒或減少 maxConcurrencyPerEnvironment 以限制影響。

請求隔離

由於所有請求共用相同的程序和事件迴圈,請避免在全域變數中儲存每個請求狀態。使用請求範圍中介軟體內容 (例如 Express req/res 物件) 來隔離請求資料。

如需maxConcurrencyPerEnvironment根據應用程式的 I/O 和 CPU 特性來設定 的指引,請參閱 Lambda Web 函數的擴展行為。

記憶體和Node.js堆積

每個執行環境都有 2 GB 的記憶體。下列適用於 Node.js V8 堆積:

  • 預設堆積為 1,024 MB。

  • 若要使用較大的堆積,請在修訂版的環境變數NODE_OPTIONS中設定 (NODE_OPTIONS=--max-old-space-size=1536值以 MB 為單位)。

  • 您在 中設定的值會NODE_OPTIONS取代預設值。如果您只設定 --max-old-space-size,Lambda 不會設定 --max-semi-space-size,並為其Node.js使用自己的預設值。

  • 堆積、緩衝區、原生配置、執行期和並行請求都必須符合 2 GB 的環境記憶體。

Lambda 如何將請求路由到您的應用程式

Web 函數端點僅接受連接埠 443 上的 HTTPS 流量。未提供純 HTTP,因此您不需要將 HTTP 重新導向至 HTTPS 或在應用程式中設定 TLS。

Lambda 會在端點終止 TLS,並將每個請求轉送到執行環境中的應用程式 HTTP 伺服器。您的應用程式會在 Lambda 提供的地址上提供純 HTTP;您永遠不會在程式碼中處理憑證或 TLS 組態。

Lambda 會選擇伺服器必須接聽的主機和連接埠。Lambda 會透過 AWS_LAMBDA_HTTP_ENDPOINT環境變數,以 host:port 格式將地址傳達給您的應用程式。使用此變數,Lambda 會設定哪些變數來判斷伺服器接聽的位置。您的應用程式必須在啟動時讀取變數:

const [host, port] = (process.env.AWS_LAMBDA_HTTP_ENDPOINT || 'localhost:3000').split(':'); app.listen(port, host);

Lambda 不會在您的本機電腦上設定 變數。備用地址僅適用於未設定變數時,因此只會在本機執行中使用。若要使用不同的本機地址,AWS_LAMBDA_HTTP_ENDPOINT請自行設定。如需範例,請參閱 在本機執行 HTTP 伺服器。

Lambda 會將lambda-web-request-id標頭新增至每個轉送到應用程式的請求,並傳回與回應標頭相同的值,因此您可以將用戶端請求與應用程式日誌建立關聯。

Lambda 會將 Web 請求路由到 指定的地址AWS_LAMBDA_HTTP_ENDPOINT。如果您的伺服器接聽不同的主機或連接埠,則請求不會到達您的應用程式。

您的伺服器必須在啟動後 10 秒內開始接聽,且其服務的每個請求都受到修訂timeoutSeconds設定的限制。如需啟動和關閉順序,請參閱 執行環境生命週期。如需如何設定 timeoutSeconds,請參閱 管理 Web 函數修訂。