View a markdown version of this page

Lambda 函數狀態 - AWS Lambda

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

Lambda 函數狀態

所有 Lambda 函式的函式組態中都包含一個狀態欄位,用於指示函式何時準備就緒可供調用。State 會提供函式目前狀態的相關資訊,包括是否可以成功調用函式。函數狀態不會變更函數叫用的行為或函數執行程式碼的方式。

注意

SnapStart 函式的函式狀態定義略有不同。如需詳細資訊,請參閱Lambda SnapStart 和函數狀態

在許多情況下,DynamoDB 資料表是在調用間隔期間保留狀態的理想方式,因為其提供低延遲資料存取,並且可以隨著 Lambda 服務擴展。如果您使用 Amazon EFS for Lambda,也可以將資料儲存在此服務中,這樣也可以實現對檔案系統儲存的低延遲存取。

函數狀態包括:

  • Pending – Lambda 建立函數之後,會將狀態設定為待定中。處於待定狀態時,Lambda 會嘗試建立或設定函數的資源,例如 VPC 或 EFS 資源。Lambda 不會叫用待定狀態期間的函數。在函數上操作的任何叫用或其他 API 操作都會失敗。

  • Active – Lambda 完成資源組態和佈建之後,您的函數會轉換為啟用中狀態。只有啟用中的函數才能成功叫用。

  • Failed – 表示資源配置或佈建發生錯誤。當函數建立失敗時,Lambda 會將函數狀態設定為失敗,而且您必須刪除並重新建立函數。

  • Inactive – 當函數空閒足夠長的時間,以至於 Lambda 回收為其配置的外部資源時,該函數將變為非啟用狀態。當您嘗試叫用非啟用中的函數,叫用會失敗而 Lambda 會將函數設定為待定狀態,直到重新建立函數資源為止。如果 Lambda 無法重新建立資源,則函數會返回到非啟用狀態。您可能需要解決錯誤後再重新部署函式,將其還原為作用中狀態。

    如果 Lambda 無法存取函數的來源成品,函數也會轉換為 Inactive 狀態。這適用於從 Amazon ECR 刪除映像或撤銷許可的容器映像函數,以及使用自我管理 S3 程式碼儲存的 .zip 函數,其中刪除來源物件或撤銷儲存貯體政策許可。若要還原函數,請還原來源成品的存取權並更新函數。

如果您是使用 SDK 型自動化工作流程或是直接呼叫 Lambda 的服務 API,請務必在調用之前檢查函數的狀態,以驗證其是否處於作用中狀態。您可以使用 Lambda API 動作 GetFunction 來完成此動作,或者透過使用 AWS SDK for Java 2.0 配置等候程序。

aws lambda get-function --function-name my-function --query 'Configuration.[State, LastUpdateStatus]'

您應該會看到下列輸出:

[
 "Active",
 "Successful" 
]

當函數的建立處於待定狀態時,下列作業會失敗:

更新期間的函式狀態

Lambda 提供兩種更新函式的操作:

Lambda 使用 LastUpdateStatus 屬性來追蹤這些更新操作的進度。當更新正在進行時 (即 "LastUpdateStatus": "InProgress"):

當更新失敗時 (當 時"LastUpdateStatus": "Failed"):

  • 函式的狀態會保持 Active

  • 調用會繼續使用函數先前的程式碼和組態。

範例 GetFunctionConfiguration 回應

下列範例展示正在更新的函式執行 GetFunctionConfiguration 請求所傳回的結果。

{ "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function", "Runtime": "nodejs24.x", "VpcConfig": { "SubnetIds": [ "subnet-071f712345678e7c8", "subnet-07fd123456788a036", "subnet-0804f77612345cacf" ], "SecurityGroupIds": [ "sg-085912345678492fb" ], "VpcId": "vpc-08e1234569e011e83" }, "State": "Active", "LastUpdateStatus": "InProgress", ... }