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 会将函数状态设置为 failed,您必须删除该函数,然后重新创建它。

  • Inactive – 当函数空闲时间足够长,以便 Lambda 回收为其配置的外部资源时,函数变为非激活状态。当您尝试调用非激活函数时,调用会失败,Lambda 将函数设置为待处理状态,直到重新创建函数资源。如果 Lambda 无法重新创建资源,则函数将返回到非激活状态。您可能需要解决错误并重新部署函数以将其恢复到活动状态。

    如果 Lambda 失去对函数源构件的访问权限,则该函数的状态也会变为 Inactive。这适用于已从 Amazon ECR 中删除了映像或权限已被撤销的容器映像函数,以及使用自行管理的 S3 代码存储,但源对象已被删除或存储桶策略权限已被撤销的 .zip 函数。要恢复该函数,您需要恢复对源构件的访问权限并更新该函数。

如果您使用基于 SDK 的自动化工作流程或直接调用 Lambda 的服务 API,请确保在调用之前检查函数的状态以验证函数是否处于活动状态。您可以使用 Lambda API 操作 GetFunction 来执行此任务,或者使用 AWS SDK for Java 2.0 来配置 Waiter。

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", ... }