

# 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 テーブルは呼び出し間で状態を保持する理想的な方法です。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 には、関数を更新するための 2 つのオペレーションがあります。
+ [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",
    ...
}
```