Lambda による起動パフォーマンスの向上 SnapStart - AWS Lambda

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Lambda による起動パフォーマンスの向上 SnapStart

Lambda SnapStart for Java は、レイテンシーの影響を受けやすいアプリケーションの起動パフォーマンスを最大 10 倍向上させ、追加料金は発生しません。通常、関数コードは変更されません。起動時のレイテンシー (多くの場合、コールドスタート時間と呼ばれます) の最大の原因は、Lambda が関数の初期化に費やす時間で、これには関数のコードのロード、ランタイムの開始、および関数コードの初期化が含まれます。

では SnapStart、Lambda は関数バージョンを公開するときに関数を初期化します。Lambda は、初期化された実行環境のメモリとディスク状態の Firecracker MicroVM スナップショットを作成し、そのスナップショットを暗号化して、低レイテンシーアクセスのためにキャッシュします。関数バージョンを初めて呼び出し、呼び出しがスケールアップすると、Lambda はそれらをゼロから初期化するのではなく、キャッシュされたスナップショットから新しい実行環境を再開するので、起動時のレイテンシーが短縮されます。

重要

アプリケーションが状態の一意性に依存する場合は、関数コードを評価して、スナップショット操作に対する耐性があることを確認する必要があります。詳細については、「Lambda での一意性の処理 SnapStart」を参照してください。

サポートされている機能と制限事項

SnapStart は、Java 11 以降の Java マネージドランタイム をサポートします。他のマネージドランタイム (nodejs20.xpython3.12 など)、OS 専用ランタイム、およびコンテナイメージはサポートされていません。

SnapStart は、プロビジョニングされた同時実行数、arm64 アーキテクチャAmazon Elastic File System (Amazon EFS )、または 512 MB を超えるエフェメラルストレージをサポートしていません。

を使用するには SnapStart、Lambda コンソール、 AWS Command Line Interface (AWS CLI)、Lambda API、、 AWS Serverless Application Model (AWS SAM)AWS CloudFormation、および AWS SDK for Javaを使用できますAWS Cloud Development Kit (AWS CDK)。詳細については、「Lambda のアクティブ化と管理 SnapStart」を参照してください。

注記

は、公開された関数のバージョンと、バージョンを指すエイリアス SnapStart でのみ使用できます。関数の未公開バージョン ($LATEST) SnapStart では を使用できません。

サポートされるリージョン

SnapStart は、次の で使用できますAWS リージョン。

  • 米国東部(バージニア北部)

  • 米国東部 (オハイオ)

  • 米国西部 (北カリフォルニア)

  • 米国西部 (オレゴン)

  • アフリカ (ケープタウン)

  • アジアパシフィック (香港)

  • アジアパシフィック(ムンバイ)

  • アジアパシフィック (ハイデラバード)

  • アジアパシフィック(東京)

  • アジアパシフィック (ソウル)

  • アジアパシフィック (大阪)

  • アジアパシフィック (シンガポール)

  • アジアパシフィック (シドニー)

  • アジアパシフィック (ジャカルタ)

  • アジアパシフィック (メルボルン)

  • カナダ(中部)

  • 欧州 (ストックホルム)

  • 欧州 (フランクフルト)

  • 欧州 (チューリッヒ)

  • 欧州 (アイルランド)

  • 欧州 (ロンドン)

  • 欧州 (パリ)

  • 欧州 (ミラノ)

  • 欧州 (スペイン)

  • 中東 (アラブ首長国連邦)

  • 中東 (バーレーン)

  • 南米(サンパウロ)

互換性に関する考慮事項

では SnapStart、Lambda は複数の実行環境の初期状態として単一のスナップショットを使用します。関数が初期化フェーズ 中に次のいずれかを使用する場合は、 を使用する前にいくつかの変更を行う必要がある場合があります SnapStart。

一意性

スナップショットに包含される一意のコンテンツを初期化コードが生成する場合、そのコンテンツは、複数の実行環境で再利用されるときに一意にならない可能性があります。を使用する際に一意性を維持するには SnapStart、初期化後に一意のコンテンツを生成する必要があります。これには、一意の ID、一意のシークレット、および疑似ランダム性を生成するために使用されるエントロピーが含まれます。一意性を回復する方法については、「Lambda での一意性の処理 SnapStart」を参照してください。

ネットワーク接続

Lambda がスナップショットから関数を再開するときは、関数が初期化フェーズ中に確立する接続の状態が保証されません。ネットワーク接続の状態を検証し、必要に応じて再確立してください。ほとんどの場合、AWS SDK が確立するネットワーク接続は、自動的に再開されます。その他の接続については、ベストプラクティスを確認してください。

一時的なデータ

関数には、初期化フェーズ中に一時的な認証情報やキャッシュされたタイムスタンプなどのエフェメラルデータをダウンロード、または初期化するものがあります。を使用していない場合でも、使用する前に関数ハンドラーのエフェメラルデータを更新します SnapStart。

SnapStart 料金

に追加料金はかかりません SnapStart。料金は、関数に対するリクエストの数、コードの実行に要する時間、および関数用に設定されたメモリの量に基づいて請求されます。所要時間は、コードの実行が開始されてから、それが戻る、または終了するまでの時間 (1 ミリ秒単位で切り上げ) で算出されます。

所要時間の料金は、関数ハンドラーで実行されるコード、ハンドラー外で宣言される初期化コード、ランタイム (JVM) のロードにかかる時間、およびランタイムフックで実行されるすべてのコードに適用されます。Lambda が期間を計算する方法の詳細については、「Lambda のモニタリング SnapStart」を参照してください。

で設定された関数の場合 SnapStart、Lambda は実行環境を定期的にリサイクルし、初期化コードを再実行します。耐障害性のため、Lambda はスナップショットを複数のアベイラビリティーゾーンで作成します。Lambda が別のアベイラビリティーゾーンで初期化コードを再実行するたびに、料金が発生します。Lambda が料金を計算する方法の詳細については、「AWS Lambda 料金設定」を参照してください。

Lambda SnapStart とプロビジョニングされた同時実行の比較

Lambda SnapStart とプロビジョニングされた同時実行はどちらも、関数がスケールアップするときのコールドスタートと外れ値のレイテンシーを減らすことができます。 SnapStart これにより、追加コストなしで起動パフォーマンスが最大 10 倍向上します。プロビジョニングされた同時実行は、関数を、初期化され、2 桁ミリ秒台で応答できる状態に維持します。プロビジョニングされた同時実行を設定すると、AWS アカウントに料金が請求されます。プロビジョニングされた同時実行は、アプリケーションに厳格なコールドスタートレイテンシー要件がある場合に使用してください。 SnapStart および のプロビジョニングされた同時実行の両方を同じ関数バージョンで使用することはできません。

注記

SnapStart は、大規模な関数呼び出しで使用すると最も効果的です。頻繁に呼び出されない関数では、パフォーマンスが同じように向上されない場合があります。

追加リソース

この章の他のトピックを読むだけでなく、「 ワークショップによる起動の高速化AWS Lambda SnapStart」を試し、 AWS re: Invent 2022 の「Java 関数の高速コールドスタート」セッションを見ることをお勧めします。