実行環境/ライフサイクル(コールドスタート対策)難易度 標準無料
レイテンシに敏感な同期API向けLambda関数のコールドスタート影響を軽減するための施策として、有効なものを2つ選べ。
- Aレイテンシ要件が特に厳しい関数にプロビジョンド同時実行を設定し、実行環境のInitフェーズを事前に完了させておく
- Bデプロイパッケージから不要な依存関係を削除してサイズを小さくし、SDKクライアントなど再利用可能なリソースの初期化をハンドラー関数の外(グローバルスコープ)で行う
- C関数のタイムアウト値を最大の15分に延長すれば、Initフェーズの所要時間が短縮されコールドスタートの影響が軽減される
- D関数のメモリ割り当てを最大の10,240MBに設定すれば、コールドスタートは確実にゼロになることが保証される
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済
解説
コールドスタート対策は「Initフェーズの所要時間を短くする」設計・実装上の工夫と、 「Initフェーズを事前に済ませておく」インフラ側の仕組みの2軸で考えると整理しやすい。
- プロビジョンド同時実行は、指定数の実行環境のInitフェーズを呼び出し前に完了させて待機させる、後者の代表的な対策。
- デプロイパッケージのサイズを小さくする(不要な依存関係を減らす)ことと、SDKクライアント等の再利用可能なリソースの初期化をハンドラー外(グローバルスコープ)で行うことは、 前者(Initフェーズ自体の所要時間短縮とウォーム実行での再利用の最大化)に効く実装上のベストプラクティス。
- 一方、タイムアウト値の延長は1回の実行が許される最大時間を延ばすだけで、Initフェーズの所要時間そのものには影響しない。
- メモリ割り当ての増加はCPU割当も比例して増えるため実行時間の短縮に寄与し得るが、 「コールドスタートを確実にゼロにする」保証を与えるものではなく、対策として過信すべきではない。
- Cタイムアウト値は1回の実行が許される最大時間の上限であり、Initフェーズ(初期化)の所要時間そのものには影響しない。
- Dメモリ増加はCPU割当の増加を通じてInit時間の短縮に多少寄与し得るが、コールドスタートを確実にゼロにする保証はない。根絶を狙うならプロビジョンド同時実行が本筋。
ひっかけ: 「タイムアウトを延ばせばコールドスタートの影響が消える(C)」「メモリを増やせばコールドスタートは確実にゼロになる(D)」は
いずれも過大評価。タイムアウトはInitフェーズの所要時間に無関係。メモリ増加はCPU割当増によりInit時間短縮に多少寄与し得るが、コールドスタートの根絶を保証しない。
根絶が必要ならプロビジョンド同時実行を選ぶ、という使い分けを押さえる。
公式ドキュメント・関連AWS Lambda Developer Guide ― Best practices for working with AWS Lambda functions↗AWS Lambda Developer Guide ― Configuring provisioned concurrency↗
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)