みなさん、こんにちは。サニービュー事業部の小寺です。
ラスベガスから現実に戻ってきました・・笑。
キーノート当日に書ききれなかった新機能について、まだまだお伝えしていきたいと思います。

まずは、もう1週間近く前になりますが、「Lambda Snapstart」についてお伝えします。

https://aws.amazon.com/jp/blogs/aws/new-accelerate-your-lambda-functions-with-lambda-snapstart/

Lambda Snapstartとは

特定の Lambda 関数に対して Lambda SnapStartを有効すると、新しいバージョンの関数を公開する最適化プロセスがスタートします。
このプロセスは関数を起動し、Init フェーズ全体にわたって実行します。
次に、メモリとディスクの状態に関する不変の暗号化されたスナップショットを取得し、再利用できるようにキャッシュします。
その後に関数が呼び出されると、状態は必要に応じてキャッシュからチャンク単位で取得され、実行環境への入力に使用されます。この最適化により、新しい実行環境を作成する際に専用のInit フェーズが不要になるため、呼び出し時間が短縮され、予測しやすくなります。

現在、Corretto (java11) ランタイムを利用する Java 関数のサポートを開始しており、Spring Boot、Quarkus、Micronaut、その他の Java フレームワークを利用するアプリケーションに Lambda SnapStartが使えます。Java 関数で Lambda SnapStart を有効にすると、追加コストはかからず、なんと最大で 10 倍の速さで起動できます。

Lambda SnapstartとProvisioned Concurrencyの違いとは?

実は以前の2019年12月のre:Inventで同様な機能の「Provisioned Concurrency」が提供されています。具体的な違いは?何でしょうか。改めて調べてみました。

Provisioned Concurrencyは同時並行数をリクエストが実際にくる前に対応するイメージです。
たとえ同時実行数自体を予約していたとしても、Lambda関数には以下のような課題があり、Provisioned Concurrencyで課題解決可能です。

・初期リクエストに関してコールドスタートとなりレイテンシーが大きくなる
Lambdaの代表的な課題でLambdaは利用されないと実行環境が存在しない状態になるため、そこからの初期リクエストでは実行環境構築に時間がかかりレスポンスが遅くなってしまいます。

・スパイクなリクエストが来た場合、スケーリングが追いつかない
根本的には課題1と同じですが、スパイクなリクエスト来ると、スケーリングが追いつかず、スロットリングに引っかかってしまう場合があります。

まず違いというのか、注意点としては、Provisioned ConcurrencyとSnapStartは併用できません。
料金面での違いは、SnapStartは無料で利用できるますが、Provisioned Concurrencyはプールする実行環境環境数に応じて時間課金が発生します。
また、SnapStartはInitフェーズの代わりにRestoreフェーズがありますが、Provisioned ConcurrencyはRestoreフェーズがなく、Invokeフェーズに入るので、恐らくProvisioned Concurrencyの方がより高速に処理できると想定されます。

ご利用いただく際の留意事項

・キャッシュ
キャッシュされたスナップショットは、使用されていない状態が 14 日間続くと削除されてしまいます。
スナップショットが更新またはパッチが適用されたランタイムに依存する場合、Lambda はキャッシュを自動的に更新します。

・機能の互換性
Lambda SnapStart は、大容量のエフェメラルストレージ、エラスティックファイルシステム、プロビジョニングされた同時実行性、または Graviton2 では使用できません。

・Firecracker
Lambda Snapstartでは、ファイヤークラッカースナップショットを利用します。

料金

Lambda SnapStart の使用には追加料金はかかりません。

対象リージョン

以下のリージョンでご利用可能です。東京リージョンでも利用可能です。
・米国東部 (オハイオ、バージニア北部)
・米国西部 (オレゴン)
・アジアパシフィック (シンガポール、シドニー、東京)
・欧州 (フランクフルト、アイルランド、ストックホルム)

まとめ

Lambdaの新機能である「Lambda Snapshot」についてお伝えしました。
「どうしてもコールドスタート時の処理時間が遅すぎる」という課題をお持ちの方にはうれしいアップデートですよね。Lambdaを選択できる可能性が上がります。
Java11のLambda関数を利用しており、前提条件に合致するのであれば、とりあえず有効化してみるのが良いのではないでしょうか。