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

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

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

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

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

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

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

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

  5. 「基本設定の編集」ページの でSnapStart「公開バージョン」を選択します。

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

  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

    レスポンスで OptimizationStatusが 、Onステートが であることが示されるとActive、 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

    レスポンスで OptimizationStatusOnステートが であることが示されるとActive、 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 パラメータを指定して UpdateFunctionConfigurationアクションを使用して SnapStart 、既存の関数に対して を有効にします。

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

  3. GetFunctionConfiguration アクションを使用して、 SnapStart が関数バージョンに対して有効になっていることを確認します。バージョン番号を指定して、そのバージョンで SnapStart が有効になっていることを確認します。レスポンスで OptimizationStatusOnステートが であることが示されるとActive、 SnapStart がアクティブになり、指定された関数バージョンでスナップショットが使用可能になります。

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

Lambda SnapStart と関数の状態

を使用すると、次の関数状態が発生する可能性があります SnapStart。また、Lambda が実行環境を定期的にリサイクルし、 で設定された関数の初期化コードを再実行するときにも発生する可能性があります SnapStart。

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

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

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

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

スナップショットの更新

Lambda は、発行済みの関数バージョンそれぞれにスナップショットを作成します。スナップショットを更新するには、新しい関数バージョンを発行します。Lambda は、最新のランタイムとセキュリティパッチを使用して、スナップショットを自動的に更新します。

SnapStart で を使用する AWS SDK for Java

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

注記

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

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

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

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

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

スナップショットの削除

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

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

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

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