SAA高性能なアーキテクチャの設計
あるメディア企業が、Amazon API Gateway(REST API)と AWS Lambda、バックエンドの DynamoDB で記事配信 API を構築しています。同一のクエリパラメータを持つ読み取りリクエストが大量に発生し、Lambda の呼び出し回数と DynamoDB の読み取りが増えてコストとレイテンシが悪化しています。配信データは数分古くても許容されます。最小の運用負荷でレイテンシとコストを削減する方法はどれですか。
AAPI Gateway のステージでレスポンスキャッシュを有効化し、TTL を設定して同一リクエストの結果をキャッシュする
✓ 正解
API Gateway のステージキャッシュはクエリパラメータ等のキャッシュキー単位でレスポンスを保持し、TTL 内は Lambda と DynamoDB を呼ばずに返します。有効化のみで済み、運用負荷最小でレイテンシとコストを同時に削減できます。
Bバックエンドの Lambda 関数にプロビジョニングされた同時実行を設定し、コールドスタートを排除する
プロビジョニングされた同時実行はコールドスタートを排除しますが、リクエストごとに Lambda は呼び出され、DynamoDB 読み取りも発生します。呼び出し回数とコストは削減されず要件を満たしません。
CDynamoDB に DAX クラスタを追加し、データベース読み取りをキャッシュして応答を高速化する
DAX は DynamoDB の読み取りを高速化しますが、API Gateway と Lambda は毎回実行されます。重複する API 処理と Lambda 呼び出しコストを削減できず、最小運用負荷での要件達成になりません。
DLambda の前段に ElastiCache for Redis を配置し、関数内でキャッシュ参照ロジックを実装する
ElastiCache for Redis を使うにはキャッシュの読み書きロジックを Lambda 内に実装する必要があり、改修と運用負荷が増加します。マネージドな API Gateway キャッシュより運用負荷が大きくなります。
解説
API Gateway のステージレベルのレスポンスキャッシュは、メソッドのレスポンスをキャッシュキー(クエリパラメータなど)ごとに保持し、TTL 内の同一リクエストはバックエンドを呼ばずに即座に返します。これにより Lambda の呼び出し回数と DynamoDB の読み取りが削減され、レイテンシとコストの両方が下がります。設定はステージ上の有効化のみで運用負荷が最小です。
選択肢Bのプロビジョニングされた同時実行はコールドスタートを減らしますが、呼び出し回数やバックエンド負荷は減らず、コスト削減にもなりません。
選択肢Cの DAX は DynamoDB 読み取りを高速化しますが、Lambda の呼び出し自体は発生し続け、API 層の重複処理コストは削減できません。
選択肢Dの ElastiCache はキャッシュ参照ロジックを関数内に実装する必要があり、改修と運用負荷が増えます。
ドメイン別正答率・予想スコアでリアルタイムに実力把握
無限ノックでSAAを徹底対策。全問AI生成のオリジナル問題。
無料で演習を始める →