ジャーニーマン( @beajourneyman )です。長いの"ジャニ"と呼ばれています。
こちらはAWS Lambda と Serverless Advent Calendar 2024の7日目が執筆時点で空いていたので、後追いでお邪魔した記事になります。実行時間を繰り返し検証してまとめました。よろしくお願いいたします。
AWS Lambda で Python の SnapStart がGA
11 月 18 日、Python および .NET 関数向けの AWS Lambda SnapStart の一般提供の開始を発表しました。これにより、関数の起動パフォーマンスが数秒からわずか 1 秒未満にまで高速化され、通常は Python、C#、F#、Powershell におけるコード変更が最小限またはまったく不要になります。
Lambda SnapStart を有効化する
- プロダクションで1日におびただしい回数呼び出している Lambda があった
- Amazon Connect のフローブロックはタイムアウトにシビア
上記、背景から該当の関数に設定して試してみました。
「Lambda」を選択します。検証したい関数を表示します。「設定」タブの「一般設定」を確認します。「SnapStart」が"none"設定になっているので、"Published version"に設定します。
SnapStart の互換性に関する考慮事項
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/snapstart.html#snapstart-compatibility
SnapStartを有効にし走行させて検証する
キャッシュが効くであろう想定で、何度か実行しました。
SnapStart設定前の初回実行
↓
SnapStart設定後の初回実行
「初期所用時間」が「復元時間」になっているコトが分かります。
前回の実行からおおよそ5分以内に実行(SnapStart設定前)
↓
前回の実行からおおよそ5分以内に実行(SnapStart設定後)
同様に複数回繰り返し実証してみた結果が以下の通りです(単位は秒)。
設定前初期所要時間平均 | 設定後復元時間平均 | 差 | |
---|---|---|---|
平均 | 0.332 | 0.485 | 0.153 |
最大 | 0.378 | 0.570 | 0.192 |
実証した結果興味深いコトに、SnapStart設定後の方が遅い結果になりました。個別単独での検証では効果がない結果なので、採用を見送る結果となりました。一方で1関数を捉えて実施しただけですので、SnapStart設定が有効ではないと一概には言えないとも考えております。引き続き今後のベストプラクティスをキャッチアップしながら、改善につなげていきたいと考えています。
以上です。