View a markdown version of this page

測試 Lambda Web 函數 - AWS Lambda

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

測試 Lambda Web 函數

Web 函數會執行標準 HTTP 伺服器,因此您可以使用架構的一般工具在本機測試大多數應用程式行為。仍然需要雲端測試來驗證 IAM 授權、Amazon S3 和 AWS Key Management Service (AWS KMS) 存取、Web 函數生命週期狀態、擴展、遙測和多區域行為。

建議的測試層

下表說明每個測試層、驗證的內容,以及執行的位置。

測試層 它驗證的內容 執行位置
單位 商業邏輯、驗證、授權決策、序列化和錯誤處理。 本機開發和建置環境。
HTTP 整合 路由、中介軟體、標頭、串流、逾時、正常中斷連線和架構行為。 針對本機執行的生產伺服器。
套件 項目檔案、生產相依性、封存配置、啟動,以及伺服器對 的使用AWS_LAMBDA_HTTP_ENDPOINT。 從部署管道上傳的確切封存。
雲端整合 IAM、儲存貯體政策、金鑰、生命週期狀態、端點行為、遙測和下游 AWS 服務呼叫。 在隔離 AWS 帳戶 或測試環境中。
載入和恢復能力 並行安全、延遲、限流、下游限制、回復和區域故障行為。 在類似生產的雲端環境中,具有明確的成本和流量控制。

在本機執行 HTTP 伺服器

使用 的本機備用AWS_LAMBDA_HTTP_ENDPOINT,如 所示最少Express的應用程式。您也可以明確設定變數,以測試 Lambda 所使用的相同啟動路徑:

AWS_LAMBDA_HTTP_ENDPOINT=127.0.0.1:3000 node index.js

使用一般 HTTP 用戶端傳送請求,並驗證狀態碼、回應內文、標頭、請求驗證、身分驗證中介軟體、逾時、串流和用戶端中斷連線處理。

在本機整合測試期間執行並行請求。檢查全域請求狀態、共用可變快取、重複初始化、檔案名稱衝突和事件迴圈封鎖。

測試部署套件

  1. 從遞交的鎖定檔案安裝相依性,並使用與部署管道相同的命令建立封存。

  2. 將封存解壓縮至乾淨的目錄。從該目錄執行應用程式,而無法存取開發相依性或未追蹤的來源檔案。

  3. 確認設定的項目檔案存在於預期的路徑,並啟動 HTTP 伺服器。

  4. 記錄存檔檢查總和和和修訂版所使用的 Amazon S3 物件版本 ID。使用這些值來識別測試中的確切成品。

Web 函數在 Arm64 上執行。當套件包含原生相依性時,請為 Linux Arm64 建置和測試這些相依性,而不是重複使用 x86-64 開發電腦的成品。例如,您可以在 Arm64 容器中安裝生產相依性:

docker run --rm --platform linux/arm64 \ --volume "$PWD":/app \ --workdir /app \ node:24 \ npm ci --omit=dev

在隔離的雲端環境中進行測試

  1. 將測試的封存上傳至版本控制的 Amazon S3 儲存貯體,並建立參考產生物件版本的修訂。

  2. 輪詢修訂,直到變成 Active或 為止Failed。測試失敗,回報為 ,stateReason而不是無限期等待。

  3. 建立或更新測試端點。輪詢 state和 updateStatus。對於 MultiRegion和 PerRegion端點,驗證每個區域狀態。

  4. 將請求傳送至端點,並驗證應用程式回應、lambda-web-request-id、日誌、指標和預期的下游副作用。

  5. 當測試完成時,刪除端點、函數、測試物件、日誌群組和其他測試資源。

測試授權和暴露

  • 對於 IamAuth,確認未簽署的請求失敗、允許的主體成功、拒絕的主體失敗,以及跨帳戶存取需要身分和資源政策。

  • 對於 ApplicationManaged,測試遺失、過期、格式不正確和不足的應用程式登入資料。與身分驗證分開測試授權。

  • 當瀏覽器呼叫端點時,測試瀏覽器預檢請求、允許和拒絕的原始伺服器、憑證請求和安全標頭。

  • 當前門保護端點時,請確認直接原始伺服器請求遭拒,而且只有預期的前門身分或網路路徑可以叫用它。

測試並行、擴展和限流

  • 逐漸增加負載,同時記錄延遲、4xx 和 5xx 回應、調節、作用中環境和下游使用率。

  • maxConcurrencyPerEnvironment 獨立測試設定的 maxEnvironments、 rateLimit和 。使用lambda-web-error-type回應標頭 (Platform.EndpointRequestThrottle、Platform.AccountRequestThrottle、Platform.AccountActiveVCPUArm64Throttle、 Platform.EndpointMaxEnvThrottle或 Platform.EndpointConcurrentInitThrottle) 來確認產生每個 HTTP 429 回應的限制。記錄沒有個別lambda-web-error-type標頭的 HTTP 503 回應。這些回應可能表示暫時載入卸載或內部錯誤。如需詳細資訊,請參閱Web 函數錯誤類型。

  • 測試流量爆量和冷啟動,不只是穩定狀態輸送量。

  • 使用唯一的測試資料和冪等鍵。請勿在負載測試期間自動重試非等冪請求。

  • 在開始負載測試之前,設定明確的流量、持續時間和成本限制。協調可能影響共用帳戶配額或下游系統的測試。

測試部署和復原

在測試環境中,部署兩個修訂,並執行與生產中使用的相同加權路由程序。確認您的日誌或自訂指標可以將請求歸因於每個修訂。刻意觸發復原條件、將所有流量還原至先前的修訂版,並確認其程式碼物件和相依性仍然可用。

對於 MultiRegion或 PerRegion端點,測試部分更新失敗,並確認部署自動化偵測到失敗的區域狀態。測試復原動作,並在更正原因後重複端點更新。