無限ノック › DVA 練習問題一覧 › 問題
DVAAWSのサービスを使用した開発

Java(Spring Boot)で実装されたLambda関数がAPI Gatewayのバックエンドとして稼働しています。初期化処理が重く、コールドスタート時に数秒のレイテンシが発生します。追加の常時稼働コストを発生させずにコールドスタートのレイテンシを削減したいです。最も適切な方法はどれですか。

A
公開した関数バージョンに対してLambda SnapStartを有効化し、初期化済み実行環境のスナップショットから起動する
✓ 正解
SnapStartは初期化済み実行環境のスナップショットを復元して起動するため、重いJava初期化を毎回回避でき、コールドスタートを大幅短縮します。追加料金がなく常時稼働コストも発生しないため、要件を唯一満たします。
B
関数エイリアスにプロビジョンドコンカレンシーを設定し、実行環境を事前に初期化した状態で待機させる
プロビジョンドコンカレンシーは初期化済み実行環境を常時プロビジョニングして待機させるため、利用の有無にかかわらず常時課金が発生します。コールドスタートは減らせますが「追加の常時コストなし」という要件に反します。
C
関数のメモリ割り当てを最大の10,240MBに引き上げ、割り当てられるCPU性能を増やして初期化を高速化する
メモリ増加でCPUは増えますが、重い初期化処理自体はコールドスタートで毎回実行されます。レイテンシ短縮は限定的で、メモリ×実行時間の単価が上がり常時的なコスト増にもつながるため不適切です。
D
デプロイパッケージをコンテナイメージ形式に変更し、イメージレイヤーのキャッシュを活用する
コンテナイメージ化はデプロイパッケージ形式の変更にすぎず、初期化を含むコールドスタートは依然として発生します。レイヤーキャッシュはイメージ取得を速めるだけで、Javaアプリの初期化レイテンシ問題は解決しません。

解説

Lambda SnapStartは、公開された関数バージョンの初期化済み実行環境(Firecracker microVM)のスナップショットを取得し、以降の呼び出しでそのスナップショットを復元して起動する機能です。 重い初期化を毎回実行せずに済むため、Javaのコールドスタートレイテンシを大幅に削減できます。 SnapStart自体に追加料金はなく(対応ランタイムで利用可)、常時稼働コストが発生しない点が要件に合致します。 選択肢のプロビジョンドコンカレンシーは初期化済み環境を常時確保するため、常時課金が発生します。 選択肢のメモリ増加はCPUを増やすものの初期化処理自体は毎回走り、メモリ単価上昇でコストが増えます。 選択肢のコンテナイメージ化はパッケージ形式の変更にすぎず、コールドスタート自体は発生します。

ドメイン別正答率・予想スコアでリアルタイムに実力把握

無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。

無料で演習を始める →
← DVA の問題一覧に戻る