AWSはPythonと.NET関数向けのLambda SnapStart、サーバーレスアプリケーションの起動パフォーマンスを大幅に改善するために設計された機能の一般提供を開始した。
以前、同社はコールドスタートを減らすためにJava関数向けのLambdaSnapStartを導入した。Pythonと.NET関数向けのSnapStartによりこれがPython、C#、F#、Powershellで書かれた関数にも適用されるようになった。
Lambda SnapStartは事前に環境を初期化し、そのメモリとディスクの状態をキャッシュすることで関数のコールドスタート・レイテンシーを最適化する。キャッシュされた環境はその後の実行再開時に使用され、コールドスタートでしばしば発生する遅延を最小限に抑える。AWSクラウドのprincipal developer advocate Channy Yun氏は、書いている:
初めて関数バージョンを呼び出す時、そして呼び出しがスケールアップするにつれ、Lambdaはスタートアップ・レイテンシーを改善するためにスクラッチから初期化するのではなく、キャッシュされたスナップショットから新しい実行環境を再開する。
(出典:AWSニュースブログ記事))
Amazon Web Servicesの副社長/Distinguished Engineer Marc Brooker氏は、LinkedInのブログ投稿で説明している:
各Lambda関数は1つ以上のFirecrackerベースのMicroVMで実行され、各MicroVMは関連する状態:メモリ、デバイス状態、CPUレジスタなどを持つ。「スナップショット」とはFirecrackerにこの状態を保存すること-メモリやその他状態をディスク上のファイルに書き込むことを指示することです。スナップショットは同じ物理マシン、または同じハードウェア構成を持つ別のマシンに復元できます。復元は状態をメモリ、デバイス、CPUにコピーし、その後(仮想)CPUに実行開始を指示するだけの単純作業です。
開発者はAWSマネジメントコンソール、AWSコマンドラインインターフェース(AWS CLI)、またはAWS SDKを使用して、Pythonと.NET関数向けのSnapStartを有効化、更新、削除できる。Python 3.12以降と.NET 8以降のマネージドランタイムを使用して、Lambda関数を有効化できる。
AWS サーバーレスヒーローYan Cui氏がツイートした:
すごい、SnapStartがPythonと.Net関数で使えるようになった!
興味深いことにノードには対応していないんですね。知名度は関係ないと思うのでノードがSnapStartとうまく動作しない何かがあるのでしょう。
現在、Python と.NET関数向けのAWS Lambda SnapStartは、米国東部(バージニア州北部)、米国東部(オハイオ州)、米国西部(オレゴン州)、アジアパシフィック(シンガポール)、アジアパシフィック(シドニー)、アジアパシフィック(東京)、ヨーロッパ(フランクフルト)、ヨーロッパ(アイルランド)、ヨーロッパ(ストックホルム)のAWSリージョンで利用できる。
最後に、Python と.NETのマネージドランタイムでは、SnapStart料金には公開された関数バージョンごとのキャッシュコストと各インスタンスの復元コストが含まれる。同社は、SnapStartのキャッシュコストを削減するために未使用の関数バージョンを削除することを推奨している。Lambdaの料金詳細については料金ページで確認できる。