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

商品カタログを返すREST API (API Gateway + Lambda + DynamoDB) で、GET /products/{id} へのリクエストが読み取り中心かつ同一idの繰り返しが多い。レスポンス内容の更新頻度は低い。追加のインフラを増やさず、API Gatewayの設定のみでDynamoDBの読み取りコストとp99レイテンシを削減したい。最も適切な方法はどれか。

A
ステージでAPIキャッシュを有効化し、{id}パスパラメータをキャッシュキーに含めてTTLを設定する
✓ 正解
API GatewayのステージキャッシュはGETレスポンスをキャッシュしバックエンド呼び出しを削減する。{id}をキャッシュキーに含めることで商品ごとに正しいレスポンスが返り、TTL内はLambda/DynamoDBにアクセスしない。追加インフラ不要でコストとp99レイテンシを削減でき要件に合致する。
B
ステージでAPIキャッシュを有効化するが、キャッシュキーは設定せずデフォルトのまま運用する
キャッシュを有効化してもキャッシュキーに{id}を含めないと、全リクエストが同一キャッシュエントリを共有し、ある商品のレスポンスが別の商品のリクエストに返ってしまう。正しい結果を返せないため不適切な設定となる。
C
Lambdaオーソライザーを追加し、オーソライザーのキャッシュ(TTL)でレスポンスをキャッシュする
Lambdaオーソライザーのキャッシュはオーソライザーが返すIAMポリシー(認可結果)をTTLでキャッシュする機能であり、APIのレスポンス本体はキャッシュしない。DynamoDB読み取りコストもレイテンシも削減できない。
D
API Gatewayの前段にCloudFrontディストリビューションを追加し、GETレスポンスをキャッシュする
CloudFrontでもGETキャッシュは可能だが、別途ディストリビューションという追加インフラが必要で、API Gatewayの設定のみという要件に反する。キャッシュ無効化やオリジン設定など運用も増えるため最適ではない。

解説

API Gatewayのステージレベルのキャッシュを有効化すると、メソッドのレスポンスをキャッシュし、TTL内の同一リクエストはバックエンド(Lambda/DynamoDB)を呼ばずに応答する。 GET /products/{id}のようにパスパラメータで対象が変わるエンドポイントでは、{id}をキャッシュキーに含める必要がある。これにより商品ごとに独立したキャッシュエントリが作られ、正しいレスポンスを返しつつバックエンドアクセスとレイテンシ、DynamoDBの読み取りコストを削減できる。追加インフラも不要。 選択肢Bはキャッシュキー未設定のため、異なるidに同じキャッシュ応答を返す誤動作が起きる。 選択肢Cのオーソライザーキャッシュは認可結果のキャッシュでありレスポンス本体は対象外。 選択肢DのCloudFront追加は要件の「API Gatewayの設定のみ」に反する。

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

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

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