

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

# Lambda Web 函數執行時間
<a name="web-functions-runtimes"></a>

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

## 支援的 Node.js 版本
<a name="web-functions-runtimes-versions"></a>


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

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

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

`nodejs24.x` Web 函數執行時間會遵循與對應 Lambda 事件函數執行時間相同的棄用週期。如需棄用日期和棄用程序，請參閱 [執行期淘汰政策](lambda-runtimes.md#runtime-support-policy)。

## 自動執行階段修補
<a name="web-functions-runtimes-patching"></a>

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

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

如需 Lambda 如何管理執行期更新的詳細資訊，請參閱 [了解 Lambda 如何管理執行時期版本更新](runtimes-update.md)。

## 支援的 Web 架構
<a name="web-functions-runtimes-frameworks"></a>

您可以使用啟動 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` 項目檔案。如需詳細資訊，請參閱[環境變數](web-functions-revisions-env-vars.md)。如需完整的應用程式，請參閱 [最少Express的應用程式](web-functions-samples.md#web-functions-samples-express)。

## Node.js 執行模型
<a name="web-functions-runtimes-execution-model"></a>

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 函數的擴展行為](web-functions-scaling.md)。

## 記憶體和Node.js堆積
<a name="web-functions-runtimes-memory"></a>

每個執行環境都有 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 如何將請求路由到您的應用程式
<a name="web-functions-runtimes-port"></a>

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 伺服器](web-functions-testing.md#web-functions-testing-local)。

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

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

您的伺服器必須在啟動後 10 秒內開始接聽，且其服務的每個請求都受到修訂`timeoutSeconds`設定的限制。如需啟動和關閉順序，請參閱 [執行環境生命週期](web-functions-env-lifecycle.md)。如需如何設定 `timeoutSeconds`，請參閱 [管理 Web 函數修訂](web-functions-revisions.md)。