

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

# 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 會將函數狀態設定為失敗，而且您必須刪除並重新建立函數。
+ `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) 配置等候程序。

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