AWS Lambdaのコールドスタートを劇的に速くする「AWS Lambda SnapStart」発表

Amazon Web Services(AWS)の年次イベント「AWS re:Invent 2022」が米ラスベガスで開幕しました。

毎年恒例となった月曜日夜に行われるイベント最初の大型セッション「Monday Night Live」には、AWS Utility Computing担当SVP Peter DeSantis氏が登壇。

fig

AWSのインフラに関わる最新情報の1つとして、AWS Lambdaのコールドスタートを劇的に速くする「AWS Lambda SnapStart」を発表しました

fig

AWS Lambda SnapStartは今日から追加費用なしで利用可能。

コールドスタートを劇的に速くする

AWS Lambdaはいわゆるサーバレスコンピューティングの基盤を提供するサービスです。

あらかじめAWS Lambdaに登録した関数が何らかのイベントをトリガーとして起動され、関数の終了とともにそのインスタンスも終了する、という仕組みを備えています。

AWS Lambdaでは、起動した関数の内容がキャッシュされている状態で再度関数を起動する場合などウォームスタートでは迅速に関数が実行されますが、まっさらの状態で関数が起動されるコールドスタートの場合には関数の起動時間がかかってしまうという課題がありました。

DeSantis氏はコールドスタートのプロセスの中でもっとも時間がかかっているのが初期化だと説明します。

fig

「コールドスタートでは、マネージドランタイムとしてまず新しいMicroVMを起動する。すべての言語ランタイムがプリインストールされ初期化される。最適化されたFirecrackerではこれはすぐに終わる。

次に顧客の関数をランタイム環境で実行するための変換が行われる。これにかかる時間は言語や関数の大きさによるが、コールドスタート全体からすれば非常に小さな割合でしかない。

関数がロードされると初期化(Initialization)が行われる。これは実行する言語によって行われる非常に時間のかかる処理だ。Javaを例に挙げると3つの大きなパートに分かれる。JavaVMを起動し、クラスのコードをロードして圧縮を解き、初期化コードを実行する。これが時間のかかる処理の典型例だ」(DeSantis氏)

しかし興味深いことに、この初期化が終わると同じ状態に落ち着くとDeSantis氏は指摘。「この初期化が終わった状態のスナップショットをとるとどうなるか、考えてみよう」(DeSantis氏)

「初期化のプロセス全体を省略することができるようになるではないか」(DeSantis氏)

DeSantis氏はこれによってコールドスタートが劇的に速くなると説明。これを利用した「AWS Lambda SnapStart」を発表しました

AWS Lambda SnapStartは、コールドスタートにかかる時間を最大90%削減するとのことです。

fig

AWSはスナップショットをセーフにするために行ったランタイムやコモンライブラリなどへの変更を、各オープンソースコミュニティにコントリビュートしたことも合わせて発表しました。

fig

AWS Lambda SnapStartを紹介したAWSのブログ 「New – Accelerate Your Lambda Functions with Lambda SnapStart」によると、JavaVMはAWSによるCorrettoを利用しているとのことです。AWS自身がJavaディストリビューションを提供していることが、ここで生かされたようですね。

We are launching with support for Java functions that make use of the Corretto (java11) runtime, and expect to see Lambda SnapStart put to use right away for applications that make use of Spring Boot, Quarkus, Micronaut, and other Java frameworks.

今回、Corretto(java11)ランタイムを利用するJava関数のサポートを開始します。これでSpring Boot、Quarkus、MicronautなどのJavaフレームワークを利用したアプリケーションで、すぐにLambda SnapStartが活用されることが期待されます。