TOP>コラム一覧>[SVS320] AWS Lambda SnapStart: Fast cold starts for your Java functions[NEW LAUNCH!]

[SVS320] AWS Lambda SnapStart: Fast cold starts for your Java functions[NEW LAUNCH!]

関数コードを変更することなく、Javaベースの関数のコールドスタートを最大10倍速くするAWS SnapStart機能の紹介セッションでした。

Javaでは、関数を初期化するときに以下の項目の処理が必要です。

  • Class loading
  • Runtime dependency injection(依存性注入)
  • Just-in-time compliation

上記の初期化時に発生する問題を解決するために、追加のライブラリやフレームワークを使用したり、メモリを増設する方法などを使用しています。

AWS Lambda SnapStartを使用すると、レイテンシーの影響を受けやすい Java アプリケーションに対して、追加コストなしで最小限のコード変更またはまったく変更なしで、最大10倍高速な機能を開始できます。

SnapStartを使用すると、関数バージョンを公開するときに関数の初期化が事前に行われます。
Lambdaは、初期化された実行環境のメモリとディスクの状態についてFirecracker microVMスナップショットを作成して暗号化し、短い待ち時間アクセスのためにキャッシュします。
アプリケーションが起動して拡張され、トラフィックを処理するとき、Lambdaは最初から初期化するのではなく、キャッシュされたスナップショットから新しい実行環境を再開して起動パフォーマンスを向上させます。

Lambda SnapStart機能が回復力を持たせるために考慮すべき事項は次のとおりです。

  • ネットワーク接続:コードが初期化段階でネットワークサービスへの長期接続を作成し、呼び出し段階でそれを使用する場合は、必要に応じて接続を再確立できることを確認する必要があります。
  • Ephemeral data:コードが初期化段階で参照情報をダウンロードまたは計算する場合は、クイックチェックを実行してキャッシュ期間中に古くないことを確認する必要があります。
  • Uniqueness:SnapStartを使用するときに一意性を維持するために、初期化中に作成されたすべての一意のコンテンツは、初期化後に作成する必要があります。


AWS Lambda SnapStart アクティベーションは、Lambda 関数の [一般設定] タブで設定可能で、コードの変更も必要です。

Lambda SnapStartを使用すると、どのくらいの遅延時間が減少するかを上記のようにテスト環境を設定し、毎秒100個の要求を10分間送信する方法でテストしました。

実際、Lambda SnapStartを使用した場合、起動が10倍程度速くなったそうです。

Javaで開発されたLambda関数やアプリケーションをお客様が利用されているのであれば、導入を検討する価値のある機能のように思いますし、対応言語が限定されることなく継続的に追加されていけばより便利な機能になっていくのではないでしょうか。

お問い合わせ

引用元

TOP>コラム一覧>[SVS320] AWS Lambda SnapStart: Fast cold starts for your Java functions[NEW LAUNCH!]

pagetop