Lambda SnapStart のアクティブ化と管理 - AWS Lambda

Lambda SnapStart のアクティブ化と管理

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

SnapStart のアクティブ化 (コンソール)

関数に対して SnapStart をアクティブ化する
  1. Lambda コンソールの関数ページを開きます。

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

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

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

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

  6. [Save] を選択します。

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

  8. 関数バージョンを呼び出します

SnapStart のアクティブ化 (AWS CLI)

既存の関数に対して SnapStart をアクティブ化する
  1. --snap-start オプションを指定した update-function-configuration コマンドを実行して、関数設定を更新します。

    aws lambda update-function-configuration \ --function-name my-function \ --snap-start ApplyOn=PublishedVersions
  2. publish-version コマンドを使用して、関数バージョンを発行します。

    aws lambda publish-version \ --function-name my-function
  3. バージョン番号を指定した get-function-configuration コマンドを実行して、その関数バージョンに対して SnapStart がアクティブ化されていることを確認します。以下の例では、バージョン 1 が指定されています。

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

    レスポンスで OptimizationStatusOnStateActive になっていれば、指定された関数バージョンで SnapStart がアクティブ化されており、スナップショットを利用できます。

    "SnapStart": { "ApplyOn": "PublishedVersions", "OptimizationStatus": "On" }, "State": "Active",
  4. バージョンを指定した invoke コマンドを実行して、関数バージョンを呼び出します。以下の例は、バージョン 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 でサポートされているグローバルコマンドラインオプション」を参照してください。

新しい関数の作成時に SnapStart をアクティブ化する
  1. --snap-start オプションを指定した create-function コマンドを実行して、関数を作成します。--role には、実行ロールの Amazon リソースネーム (ARN) を指定します。

    aws lambda create-function \ --function-name my-function \ --runtime "java21" \ --zip-file fileb://my-function.zip \ --handler my-function.handler \ --role arn:aws:iam::111122223333:role/lambda-ex \ --snap-start ApplyOn=PublishedVersions
  2. publish-version コマンドを使用して、バージョンを作成します。

    aws lambda publish-version \ --function-name my-function
  3. バージョン番号を指定した get-function-configuration コマンドを実行して、その関数バージョンに対して SnapStart がアクティブ化されていることを確認します。以下の例では、バージョン 1 が指定されています。

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

    レスポンスで OptimizationStatusOnStateActive になっていれば、指定された関数バージョンで SnapStart がアクティブ化されており、スナップショットを利用できます。

    "SnapStart": { "ApplyOn": "PublishedVersions", "OptimizationStatus": "On" }, "State": "Active",
  4. バージョンを指定した invoke コマンドを実行して、関数バージョンを呼び出します。以下の例は、バージョン 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 でサポートされているグローバルコマンドラインオプション」を参照してください。

SnapStart のアクティブ化 (API)

SnapStart をアクティブ化する
  1. 以下のいずれかを実行します。

    • SnapStart パラメータを設定した CreateFunction API アクションを使用して、SnapStart がアクティブ化された新しい関数を作成します。

    • 既存の関数に対する SnapStart は、SnapStart パラメータを指定した UpdateFunctionConfiguration アクションを使用してアクティブ化します。

  2. PublishVersion アクションを使用して、関数バージョンを発行します。Lambda がコードを初期化し、初期化された実行環境のスナップショットを作成してから、低レイテンシーアクセスのためにスナップショットをキャッシュします。

  3. getFunctionConfiguration アクションを使用して、関数バージョンに対して SnapStart がアクティブ化されていることを確認します。バージョン番号を指定して、そのバージョンに対して SnapStart がアクティブ化されていることを確認します。レスポンスで OptimizationStatusOnStateActive になっていれば、指定された関数バージョンで SnapStart がアクティブ化されており、スナップショットを利用できます。

    "SnapStart": { "ApplyOn": "PublishedVersions", "OptimizationStatus": "On" }, "State": "Active",
  4. Invoke アクションを使用して、関数バージョンを呼び出します。

Lambda SnapStart と関数の状態

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

保留中

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

アクティブ

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

非アクティブ

Inactive 状態は、Lambda が関数スナップショットを定期的に再生成してソフトウェア更新プログラムを適用するときに発生する可能性があります。この場合、関数の初期化が失敗すると、関数が Inactive 状態になる可能性があります。

Java ランタイムを使用している関数では、14 日間呼び出しがない場合、Lambda はスナップショットを削除します。14 日後に関数バージョンを呼び出すと、Lambda は SnapStartNotReadyException レスポンスを返し、新しいスナップショットの初期化を開始します。関数バージョンが Active 状態になるまで待ってから、もう一度呼び出してください。

失敗

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

スナップショットの更新

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

AWS SDK での SnapStart の使用

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

注記

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

AWS CloudFormation、AWS SAM、および AWS CDK での SnapStart の使用

  • AWS CloudFormation: テンプレートで SnapStart エンティティを宣言します。

  • AWS Serverless Application Model (AWS SAM): テンプレートで SnapStart プロパティを宣言します。

  • AWS Cloud Development Kit (AWS CDK): SnapStartProperty タイプを使用します。

スナップショットの削除

Lambda は、以下の場合にスナップショットを削除します。

  • 関数または関数バージョンが削除された。

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

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