本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
測試 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 用戶端傳送請求,並驗證狀態碼、回應內文、標頭、請求驗證、身分驗證中介軟體、逾時、串流和用戶端中斷連線處理。
在本機整合測試期間執行並行請求。檢查全域請求狀態、共用可變快取、重複初始化、檔案名稱衝突和事件迴圈封鎖。
測試部署套件
-
從遞交的鎖定檔案安裝相依性,並使用與部署管道相同的命令建立封存。
-
將封存解壓縮至乾淨的目錄。從該目錄執行應用程式,而無法存取開發相依性或未追蹤的來源檔案。
-
確認設定的項目檔案存在於預期的路徑,並啟動 HTTP 伺服器。
-
記錄存檔檢查總和和和修訂版所使用的 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
在隔離的雲端環境中進行測試
-
將測試的封存上傳至版本控制的 Amazon S3 儲存貯體,並建立參考產生物件版本的修訂。
-
輪詢修訂,直到變成
Active或 為止Failed。測試失敗,回報為 ,stateReason而不是無限期等待。 -
建立或更新測試端點。輪詢
state和updateStatus。對於MultiRegion和PerRegion端點,驗證每個區域狀態。 -
將請求傳送至端點,並驗證應用程式回應、
lambda-web-request-id、日誌、指標和預期的下游副作用。 -
當測試完成時,刪除端點、函數、測試物件、日誌群組和其他測試資源。
測試授權和暴露
-
對於
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端點,測試部分更新失敗,並確認部署自動化偵測到失敗的區域狀態。測試復原動作,並在更正原因後重複端點更新。