無限ノック › DVA 練習問題一覧 › 問題
DVAトラブルシューティングと最適化

API Gateway(REST API)とLambdaバックエンドで構築された商品カタログAPIがあります。GET /products/{category} は同一カテゴリに対して同じ結果を返し、データは1時間に1回しか更新されません。アクセス集中時にLambdaの同時実行が急増し、レイテンシとコストが問題になっています。アプリのコードを変更せず、繰り返しリクエストに対するレイテンシとバックエンド負荷を最小化する最も適切な方法はどれですか。

A
API GatewayのステージでAPIキャッシュを有効化し、{category}をキャッシュキーに含めてTTLを設定する
✓ 正解
ステージのAPIキャッシュは指定TTLでレスポンスを保持し、{category}をキャッシュキーに含めればカテゴリ別にキャッシュできる。1時間更新のデータならTTL設定でLambda呼び出しを大幅削減でき、コード変更なしで要件を満たす。
B
Lambda関数にプロビジョンド・コンカレンシーを設定し、コールドスタートによるレイテンシを排除する
プロビジョンド・コンカレンシーはコールドスタートを排除するがリクエストごとにLambdaは実行され続ける。同時実行の急増とそれに伴うコストの問題は解消されず、繰り返しリクエストの負荷削減にならない。
C
API GatewayのメソッドにスロットリングのRate/Burst制限を設定し、過剰なリクエストを抑制する
スロットリングは流量制限で過剰リクエストを拒否するだけで、正当なリクエストの繰り返し処理を高速化したりバックエンド負荷をキャッシュで減らす効果はない。要件のレイテンシ改善に直結しない。
D
CloudFront経由でAPI Gatewayを公開し、ビューワーリクエストでLambda@Edgeを実行してレスポンスを生成する
Lambda@Edgeをエッジで実行してもキャッシュがなければリクエストごとに処理が走り、バックエンド負荷削減にはつながらない。構成も複雑化し、コード変更なしという要件にも適さない。

解説

API Gatewayのステージレベルのキャッシュは、エンドポイントのレスポンスを指定したTTLでキャッシュし、同一リクエストに対してバックエンドのLambdaを呼び出さずに応答します。 パスパラメータ{category}をキャッシュキーに含めればカテゴリ別にキャッシュでき、データ更新が1時間に1回ならTTLを適切に設定することで、コード変更なしにLambda呼び出し回数・レイテンシ・コストを大幅に削減できます。 選択肢Bのプロビジョンド・コンカレンシーはコールドスタートを解消しますが、リクエストごとにLambdaは実行され続けるため同時実行数とコストの問題は残ります。 選択肢Cのスロットリングは過剰リクエストを拒否するだけで、正当なリクエストのレイテンシ短縮やキャッシュ効果はありません。 選択肢DのLambda@Edgeはエッジで実行できますが、依然として毎回コードが実行されキャッシュなしでは負荷削減にならず、構成も複雑です。

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

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

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