使用 Lambda API 监控函数的状态 - AWS Lambda
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 Lambda API 监控函数的状态

创建或更新函数时,Lambda 预配置使其能够运行的计算和网络资源。在大多数情况下,这个过程非常快,并且您的函数已经准备好立即调用或修改。

如果您将函数配置为连接到 Virtual Private Cloud (VPC),则该过程可能需要更长时间。当您首次将函数连接到 VPC 时,Lambda 会预配置网络接口,这需要大约一分钟。为了传达函数的当前状态,Lambda 在函数配置文档中包括由几个 Lambda API 操作返回的附加字段。

创建函数时,函数最初处于 Pending 状态。当函数准备好调用时,状态从 Pending 更改为 Active。当状态为 Pending 时,在函数上运行的调用和其他 API 操作返回错误。如果围绕创建和更新函数构建自动化,请等待函数变为活动状态,然后再执行对该函数运行的其他操作。

您可以使用 Lambda API 获取函数状态的相关信息。状态信息包括在多个 API 操作返回的 FunctionConfiguration 文档中。要使用 AWS CLI 查看函数的状态,请使用 get-function-configuration 命令。

$ aws lambda get-function-configuration --function-name my-function { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs12.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "TracingConfig": { "Mode": "Active" }, "State": "Pending", "StateReason": "The function is being created.", "StateReasonCode": "Creating", ... }

当状态不是 Active 时,StateReasonStateReasonCode 包含有关状态的附加信息。在函数创建处于挂起状态时,以下操作会失败:

当您更新函数的配置时,更新会触发预配置资源的异步操作。在此过程中,您可以调用该函数,但对该函数的其他操作会失败。在更新过程中发生的调用将针对之前的配置运行。函数的状态是 Active,但其 LastUpdateStatusInProgress

例 函数配置 – 连接到 VPC

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

正在进行异步更新时,以下操作会失败:

正在进行更新时,其他操作(包括调用)会起作用。

例如,当您将函数连接到 Virtual Private Cloud (VPC) 时,Lambda 会为每个子网预配置弹性网络接口。此过程会使您的函数处于挂起状态一分钟左右。Lambda 还会回收未使用的网络接口,使您的函数处于 Inactive 状态。当函数处于不活动状态时,调用会导致它在网络访问恢复时进入 Pending 状态。在操作处于待处理状态时触发还原的调用以及进一步的调用失败,并引发 ResourceNotReadyException

如果在还原函数的网络接口时 Lambda 遇到错误,则该函数将恢复到 Inactive 状态。下一次调用可能会触发另一次尝试。对于某些配置错误,Lambda 等待至少 5 分钟,然后尝试创建另一个网络接口。这些错误具有以下 LastUpdateStatusReasonCode 值:

  • InsufficientRolePermission – 角色不存在或缺少权限。

  • SubnetOutOfIPAddresses – 子网中的所有 IP 地址正在使用中。

有关状态如何与 VPC 连接结合使用的更多信息,请参阅配置 Lambda 函数以访问 VPC 中的资源