

# Lambda SnapStart のアクティブ化と管理
<a name="snapstart-activate"></a>

SnapStart を使用するには、新規または既存の Lambda 関数で SnapStart をアクティブ化します。次に、関数バージョンを発行し、呼び出します。

**Topics**
+ [

## SnapStart のアクティブ化 (コンソール)
](#snapshot-console)
+ [

## SnapStart のアクティブ化 (AWS CLI)
](#snapshot-cli)
+ [

## SnapStart のアクティブ化 (API)
](#snapshot-api)
+ [

## Lambda SnapStart と関数の状態
](#snapstart-function-states)
+ [

## スナップショットの更新
](#update-snapshot)
+ [

## AWS SDK での SnapStart の使用
](#snapstart-credentials)
+ [

## CloudFormation、AWS SAM、および AWS CDK での SnapStart の使用
](#snapstart-cfn-sam)
+ [

## スナップショットの削除
](#snapshot-delete)

## SnapStart のアクティブ化 (コンソール)
<a name="snapshot-console"></a>

**関数に対して SnapStart をアクティブ化する**

1. Lambda コンソールの[関数ページ](https://console.aws.amazon.com/lambda/home#/functions)を開きます。

1. 関数の名前を選択します。

1. **[Configuration]** (設定) を選択してから、**[General configuration]** (一般設定) を選択します。

1. **[General configuration]** (一般設定) ペインで **[Edit]** (編集) を選択します。

1. **[Edit basic settings]** (基本設定を編集) ページの **[SnapStart]** で、**[Published versions]** (発行済みバージョン) を選択します。

1. **[保存]** を選択します。

1. [関数バージョンを発行します](configuration-versions.md#configuration-versions-config)。Lambda がコードを初期化し、初期化された実行環境のスナップショットを作成してから、低レイテンシーアクセスのためにスナップショットをキャッシュします。

1. [関数バージョンを呼び出します](configuration-versions.md#versioning-versions-using)。

## SnapStart のアクティブ化 (AWS CLI)
<a name="snapshot-cli"></a>

**既存の関数に対して SnapStart をアクティブ化する**

1. **--snap-start** オプションを指定した [update-function-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-configuration.html) コマンドを実行して、関数設定を更新します。

   ```
   aws lambda update-function-configuration \
     --function-name my-function \
     --snap-start ApplyOn=PublishedVersions
   ```

1. [publish-version](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/publish-version.html) コマンドを使用して、関数バージョンを発行します。

   ```
   aws lambda publish-version \
     --function-name my-function
   ```

1. バージョン番号を指定した [get-function-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/get-function-configuration.html) コマンドを実行して、その関数バージョンに対して SnapStart がアクティブ化されていることを確認します。以下の例では、バージョン 1 が指定されています。

   ```
   aws lambda get-function-configuration \
     --function-name my-function:1
   ```

   レスポンスで [OptimizationStatus](https://docs.aws.amazon.com/lambda/latest/api/API_SnapStartResponse.html) が `On`、[State](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html#lambda-GetFunctionConfiguration-response-State) が `Active` になっていれば、指定された関数バージョンで SnapStart がアクティブ化されており、スナップショットを利用できます。

   ```
   "SnapStart": { 
       "ApplyOn": "PublishedVersions",
       "OptimizationStatus": "On"
    },
    "State": "Active",
   ```

1. バージョンを指定した [invoke](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/invoke.html) コマンドを実行して、関数バージョンを呼び出します。以下の例は、バージョン 1 を呼び出します。

   ```
   aws lambda invoke \
     --cli-binary-format raw-in-base64-out \
     --function-name my-function:1 \
     --payload '{ "name": "Bob" }' \
     response.json
   ```

   AWS CLI バージョン 2 を使用している場合、**cli-binary-format** オプションは必須です。これをデフォルト設定にするには、`aws configure set cli-binary-format raw-in-base64-out` を実行します。詳細については、バージョン 2 の AWS Command Line Interface ユーザーガイドの「[AWS CLI でサポートされているグローバルコマンドラインオプション](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list)」を参照してください。

**新しい関数の作成時に SnapStart をアクティブ化する**

1. **--snap-start** オプションを指定した [create-function](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-function.html) コマンドを実行して、関数を作成します。**--role** には、[実行ロール](lambda-intro-execution-role.md)の Amazon リソースネーム (ARN) を指定します。

   ```
   aws lambda create-function \
     --function-name my-function \
     --runtime "java25" \
     --zip-file fileb://my-function.zip \
     --handler my-function.handler \
     --role arn:aws:iam::111122223333:role/lambda-ex \
     --snap-start ApplyOn=PublishedVersions
   ```

1. [publish-version](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/publish-version.html) コマンドを使用して、バージョンを作成します。

   ```
   aws lambda publish-version \
     --function-name my-function
   ```

1. バージョン番号を指定した [get-function-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/get-function-configuration.html) コマンドを実行して、その関数バージョンに対して SnapStart がアクティブ化されていることを確認します。以下の例では、バージョン 1 が指定されています。

   ```
   aws lambda get-function-configuration \
     --function-name my-function:1
   ```

   レスポンスで [OptimizationStatus](https://docs.aws.amazon.com/lambda/latest/api/API_SnapStartResponse.html) が `On`、[State](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html#lambda-GetFunctionConfiguration-response-State) が `Active` になっていれば、指定された関数バージョンで SnapStart がアクティブ化されており、スナップショットを利用できます。

   ```
   "SnapStart": { 
        "ApplyOn": "PublishedVersions",
        "OptimizationStatus": "On"
     },
     "State": "Active",
   ```

1. バージョンを指定した [invoke](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/invoke.html) コマンドを実行して、関数バージョンを呼び出します。以下の例は、バージョン 1 を呼び出します。

   ```
   aws lambda invoke \
     --cli-binary-format raw-in-base64-out \
     --function-name my-function:1 \
     --payload '{ "name": "Bob" }' \
     response.json
   ```

   AWS CLI バージョン 2 を使用している場合、**cli-binary-format** オプションは必須です。これをデフォルト設定にするには、`aws configure set cli-binary-format raw-in-base64-out` を実行します。詳細については、バージョン 2 の AWS Command Line Interface ユーザーガイドの「[AWS CLI でサポートされているグローバルコマンドラインオプション](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list)」を参照してください。

## SnapStart のアクティブ化 (API)
<a name="snapshot-api"></a>

**SnapStart をアクティブ化する**

1. 以下のいずれかを実行します。
   + [SnapStart](https://docs.aws.amazon.com/lambda/latest/api/API_SnapStart.html) パラメータを設定した [CreateFunction](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html) API アクションを使用して、SnapStart がアクティブ化された新しい関数を作成します。
   + 既存の関数に対する SnapStart は、[SnapStart](https://docs.aws.amazon.com/lambda/latest/api/API_SnapStart.html) パラメータを指定した [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html) アクションを使用してアクティブ化します。

1. [PublishVersion](https://docs.aws.amazon.com/lambda/latest/api/API_PublishVersion.html) アクションを使用して、関数バージョンを発行します。Lambda がコードを初期化し、初期化された実行環境のスナップショットを作成してから、低レイテンシーアクセスのためにスナップショットをキャッシュします。

1. [getFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html) アクションを使用して、関数バージョンに対して SnapStart がアクティブ化されていることを確認します。バージョン番号を指定して、そのバージョンに対して SnapStart がアクティブ化されていることを確認します。レスポンスで [OptimizationStatus](https://docs.aws.amazon.com/lambda/latest/api/API_SnapStartResponse.html) が `On`、[State](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html#lambda-GetFunctionConfiguration-response-State) が `Active` になっていれば、指定された関数バージョンで SnapStart がアクティブ化されており、スナップショットを利用できます。

   ```
   "SnapStart": { 
           "ApplyOn": "PublishedVersions",
           "OptimizationStatus": "On"
        },
        "State": "Active",
   ```

1. [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html) アクションを使用して、関数バージョンを呼び出します。

## Lambda SnapStart と関数の状態
<a name="snapstart-function-states"></a>

SnapStart の使用時には、以下の関数状態が発生する場合があります。

**保留中**  
Lambda がコードを初期化し、初期化された実行環境のスナップショットを取得しています。関数バージョンに対して行われる呼び出しやその他の API アクションは、すべて失敗します。

** アクティブ**  
スナップショットの作成が完了し、関数を呼び出すことができます。SnapStart を使用するには、未発行のバージョン (\$1LATEST) ではなく、発行済みの関数バージョンを呼び出す必要があります。

**非アクティブ**  
`Inactive` 状態は、Lambda が関数スナップショットを定期的に再生成してソフトウェア更新プログラムを適用するときに発生する可能性があります。この場合、関数の初期化が失敗すると、関数が `Inactive` 状態になる可能性があります。  
Java ランタイムを使用している関数では、14 日間呼び出しがない場合、Lambda はスナップショットを削除します。14 日後に関数バージョンを呼び出すと、Lambda は `SnapStartNotReadyException` レスポンスを返し、新しいスナップショットの初期化を開始します。関数バージョンが `Active` 状態になるまで待ってから、もう一度呼び出してください。

**失敗**  
初期化コードの実行時、またはスナップショットの作成時に Lambda でエラーが発生しました。

## スナップショットの更新
<a name="update-snapshot"></a>

Lambda は、発行済みの関数バージョンそれぞれにスナップショットを作成します。スナップショットを更新するには、新しい関数バージョンを発行します。

## AWS SDK での SnapStart の使用
<a name="snapstart-credentials"></a>

これらの関数から AWS SDK 呼び出しを行うために、Lambda は関数の実行ロールを引き受けることによって、一時的な一連の認証情報を生成します。これらの認証情報は、関数の呼び出し中に環境変数として利用できます。SDK の認証情報を、コード内で直接提供する必要はありません。デフォルトで、認証情報プロバイダーチェーンは認証情報を設定できる各場所を順番にチェックし、最初に利用できるものを選択します。これは通常、環境変数 (`AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY`、および `AWS_SESSION_TOKEN`) です。

**注記**  
SnapStart がアクティブ化されると、Lambda ランタイムは、アクセスキー環境変数の代わりにコンテナ認証情報 (`AWS_CONTAINER_CREDENTIALS_FULL_URI` および `AWS_CONTAINER_AUTHORIZATION_TOKEN`) を自動的に使用します。これは、関数が復元される前に認証情報の有効期限が切れることがないようにします。

## CloudFormation、AWS SAM、および AWS CDK での SnapStart の使用
<a name="snapstart-cfn-sam"></a>
+ **AWS CloudFormation: **テンプレートで [SnapStart](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-snapstart.html) エンティティを宣言します。
+ **AWS Serverless Application Model (AWS SAM): ** テンプレートで [SnapStart](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html#sam-function-snapstart) プロパティを宣言します。
+ **AWS Cloud Development Kit (AWS CDK): **[SnapStartProperty](https://docs.aws.amazon.com/cdk/api/v2/java/software/amazon/awscdk/services/lambda/CfnFunction.SnapStartProperty.html) タイプを使用します。

## スナップショットの削除
<a name="snapshot-delete"></a>

Lambda は、以下の場合にスナップショットを削除します。
+ 関数または関数バージョンが削除された。
+ **Java ランタイムのみ** - 関数バージョンを 14 日間呼び出していません。呼び出されないまま 14 日間が過ぎると、関数バージョンの状態が [Inactive](#snapstart-function-states) に移行します。14 日後に関数バージョンを呼び出すと、Lambda は `SnapStartNotReadyException` レスポンスを返し、新しいスナップショットの初期化を開始します。関数バージョンが [Active](#snapstart-function-states) 状態になるまで待ってから、もう一度呼び出してください。

Lambda は、一般データ保護規則 (GDPR) に従って、削除されたスナップショットに関連付けられたすべてのリソースを削除します。