

# Lambda 函数状态
<a name="functions-states"></a>

Lambda 在所有函数的函数配置中都包含一个[状态](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html#lambda-GetFunctionConfiguration-response-State)字段，以指示您的函数何时可以调用。`State` 提供了有关函数当前状态的信息，包括您是否可以成功调用该函数。函数状态不会改变函数调用的行为或函数运行代码的方式。

**注意**  
[SnapStart](snapstart.md) 函数的函数状态定义略有不同。有关更多信息，请参阅 [Lambda SnapStart 和函数状态](snapstart-activate.md#snapstart-function-states)。

在许多情况下，DynamoDB 表是保留调用之间状态的理想方式，因为它提供低延迟的数据访问，且可以随着 Lambda 服务进行扩展。如果您正在使用此服务，则可以将数据存储在 [Amazon EFS for Lambda](https://aws.amazon.com/blogs/compute/using-amazon-efs-for-aws-lambda-in-your-serverless-applications/) 中，这样可以实现对文件系统存储的低延迟访问。

函数状态包括：
+ `Pending` – Lambda 创建函数后，它将状态设置为待处理。处于待处理状态时，Lambda 会尝试为函数创建或配置资源，例如 VPC 或 EFS 资源。Lambda 在待处理状态期间不调用函数。在函数上运行的任何调用或其他 API 操作都将失败。
+ `Active` – Lambda 完成资源配置和预置后，函数将转换为激活状态。函数只能在激活时成功调用。
+ `Failed` – 表示资源配置或预置遇到错误。当函数创建失败时，Lambda 会将函数状态设置为 failed，您必须删除该函数，然后重新创建它。
+ `Inactive` – 当函数空闲时间足够长，以便 Lambda 回收为其配置的外部资源时，函数变为非激活状态。当您尝试调用非激活函数时，调用会失败，Lambda 将函数设置为待处理状态，直到重新创建函数资源。如果 Lambda 无法重新创建资源，则函数将返回到非激活状态。您可能需要解决错误并重新部署函数以将其恢复到活动状态。

如果您使用基于 SDK 的自动化工作流程或直接调用 Lambda 的服务 API，请确保在调用之前检查函数的状态以验证函数是否处于活动状态。您可以使用 Lambda API 操作 [GetFunction](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunction.html) 来执行此任务，或者使用 [AWS SDK for Java 2.0](https://github.com/aws/aws-sdk-java-v2) 来配置 Waiter。

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

您应看到以下输出：

```
[
 "Active",
 "Successful" 
]
```

在函数创建处于挂起状态时，以下操作会失败：
+ [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)
+ [UpdateFunctionCode](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionCode.html)
+ [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html)
+ [PublishVersion](https://docs.aws.amazon.com/lambda/latest/api/API_PublishVersion.html)

## 更新期间的函数状态
<a name="functions-states-updating"></a>

Lambda 有两种更新函数的操作：
+ [UpdateFunctionCode](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionCode.html)：更新函数的部署包
+ [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html)：更新函数的配置

Lambda 使用 [LastUpdateStatus](https://docs.aws.amazon.com/lambda/latest/api/API_FunctionConfiguration.html#lambda-Type-FunctionConfiguration-LastUpdateStatus) 属性来跟踪这些更新操作的进度。更新正在进行时（当 `"LastUpdateStatus": "InProgress"` 时）：
+ 函数的[状态](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html#lambda-GetFunctionConfiguration-response-State)保持为 `Active`。
+ 调用将继续使用函数的先前代码和配置，直到更新完成。
+ 以下操作失败：
  + [UpdateFunctionCode](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionCode.html)
  + [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html)
  + [PublishVersion](https://docs.aws.amazon.com/lambda/latest/api/API_PublishVersion.html)
  + [TagResource](https://docs.aws.amazon.com/lambda/latest/api/API_TagResource.html)

更新失败时（当为 `"LastUpdateStatus": "Failed"` 时）：
+ 函数的[状态](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html#lambda-GetFunctionConfiguration-response-State)保持为 `Active`。
+ 调用将继续使用函数的先前代码和配置。

**Example GetFunctionConfiguration 响应**  
以下示例是针对正在更新的函数的 [GetFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html) 请求的结果。  

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