あるチームが、Lambdaのコールドスタートのレイテンシを改善しようとしている。現在のLambda関数はPython 3.12で実装されており、VPCに接続されていない。コールドスタートの影響を軽減または短縮するための対策として有効なものを2つ選択してください。
- A. プロビジョニング済み同時実行数(Provisioned Concurrency)を設定して、関数インスタンスを初期化済み状態で待機させる
- B. Lambda関数のタイムアウト値を15分に設定してコールドスタートのタイムアウトを防ぐ
- C. グローバルスコープで行っているSDKクライアントの初期化処理を各ハンドラ呼び出し内(ローカルスコープ)に移動する
- D. Lambda関数のランタイムをPython 3.12からJava 17に変更する
- E. Lambda関数のメモリサイズを増やして初期化時のCPUリソースを増加させ、初期化処理の実行時間を短縮する
解答と解説を見る
正解: A, E
コールドスタートは新しいLambdaコンテナの起動と初期化処理の時間から構成される。選択肢A(プロビジョニング済み同時実行)は初期化済みのインスタンスを常時待機させる最も直接的な対策であり、コールドスタートそのものを排除できる。選択肢E(メモリ増量)はLambdaがメモリに比例してCPUリソースを割り当てる仕組みを利用しており、初期化処理(モジュールロード・SDKクライアント生成等)が高速化されることでコールドスタート時間を短縮できる。選択肢DのJava 17への変更は逆効果であり、JavaはPythonよりもJVMの起動とクラスロードに時間がかかりコールドスタートが悪化する傾向がある。選択肢Bのタイムアウト延長はコールドスタートのレイテンシを短縮しない(タイムアウト上限を緩和するだけ)。選択肢Cはグローバルスコープへの初期化処理配置がLambdaのベストプラクティスであり(コンテナ再利用時に初期化をスキップできる)、ローカルスコープへ移動することはその逆で、毎回の呼び出し時に初期化が実行されパフォーマンスが悪化する。
📚 関連サービスの解説: AWS Lambda