SAP-C02-087 · 理解確認
Caching Strategy
11問 · 1問ずつ確認
Amazon CloudFrontがApplication Load Balancerの前段にある。/catalog APIはすべての利用者へ同じレスポンスを返し、2分程度古い内容を許容できる。現在は毎回ALBとアプリケーションまでリクエストが到達し、オリジン負荷が高い。
最も適切な改善はどれか。
/catalogレスポンスをキャッシュし、許容鮮度に合うTTLと必要最小限のキャッシュキーを設定するB. CloudFrontでは動的APIをキャッシュせず、すべてのリクエストをALBとアプリケーションまで転送する
C. Amazon ElastiCacheを追加し、HTTPリクエスト自体は従来どおりALBとアプリケーションまで到達させる
D. ALBのターゲット数を増やし、同じカタログレスポンスを各リクエストでアプリケーションから再生成する
答えと解説
答え:A
要件は、
同一HTTPレスポンス
+
多数の利用者
+
許容できる古さ
+
オリジンリクエスト削減CloudFrontでHTTPレスポンス自体をキャッシュすることで、キャッシュヒット時はALBやアプリケーションまでリクエストを送らず応答できます。
Amazon CloudFrontで公開コンテンツを配信している。オリジンはトラッキング用Cookieや複数のリクエストヘッダーを受け取るが、それらによってレスポンス内容は変化しない。
すべてのCookieとヘッダーをキャッシュキーに含めた結果、キャッシュヒット率が低くなっている。
最も適切な改善はどれか。
B. TTLを短くして、同じオブジェクトでもできるだけ頻繁にオリジンへ確認する
C. レスポンス内容を変えないCookieやヘッダーをキャッシュキーから外し、必要な値だけを含める
D. CloudFrontのキャッシュを無効化し、すべてのリクエストをオリジンへ転送する
答えと解説
答え:C
CloudFrontでは、
レスポンスを変える値
→ キャッシュキーへ含める
レスポンスを変えない値
→ 不要ならキャッシュキーから除外とします。不要な値でキャッシュキーを細分化すると、同じレスポンスが別々にキャッシュされ、ヒット率が低下します。
Amazon RDSに数百万件の商品情報があり、アプリケーション内部ではその一部の人気商品だけが繰り返し参照されている。
初回アクセス時のデータベース参照は許容でき、使われない商品までキャッシュへ事前投入したくない。
最も適切な戦略はどれか。
B. Amazon ElastiCacheを使用し、キャッシュミス時だけRDSから取得して結果をキャッシュする
C. Amazon ElastiCacheで書き込みスルーだけを使用し、RDSへ書き込まれた全商品を参照有無に関係なくキャッシュへ登録する
D. 各アプリケーションインスタンスのローカルメモリへ商品データを一括投入し、インスタンスごとに独立したコピーを保持する
答えと解説
答え:B
これは、
遅延読み取りが適するシナリオです。AとCはキャッシュを利用できますが、実際に参照されない商品までキャッシュするため、
人気商品だけを
必要になった時点でキャッシュしたいという条件を外します。Dも低レイテンシーな読み取りは可能ですが、複数のアプリケーションインスタンスで共有するキャッシュではなく、それぞれが独立したコピーを保持する構成になります。
キャッシュヒット
→ ElastiCache
キャッシュミス
→ RDS
→ ElastiCacheへ保存とする遅延読み取りが最も適切です。
Amazon DynamoDBを使用するゲームサービスで、同じデータへの結果整合性のある読み取りが大量に繰り返されている。
現在のDynamoDBの1桁ミリ秒級よりさらに低い、マイクロ秒級の読み取りレイテンシーが必要である。
既存アプリケーションはDynamoDB APIを使用しており、その互換性を維持したままアプリケーション変更を最小限にしたい。
最も適切な選択はどれか。
B. DynamoDBのセカンダリインデックスを追加し、同じ項目の反復読み取りを別のアクセスパターンへ変更する
C. DynamoDBで強い整合性のある読み取りへ変更し、常に最新値を取得することで読み取りレイテンシーを下げる
D. DAXを使用し、DynamoDB互換APIを維持しながら繰り返される結果整合性読み取りをインメモリで高速化する
答えと解説
答え:D
Aもインメモリキャッシュによる低レイテンシー化は可能ですが、別のキャッシュAPIとDynamoDBとの同期処理をアプリケーション側で実装する必要があります。Bはアクセスパターンを追加できますが、反復読み取りをマイクロ秒級のキャッシュから返す仕組みではありません。Cは整合性を強める選択であり、マイクロ秒級のキャッシュヒットを実現する方法ではありません。決定条件は、
DynamoDB
+
反復読み取り
+
結果整合性
+
マイクロ秒級レイテンシー
+
DynamoDB API互換性
+
アプリケーション変更の最小化です。DynamoDB専用でDynamoDB互換APIを提供するDAXが最も適切です。
DynamoDBの注文確認処理では、すべての読み取りで強い整合性が必須である。
「DAXを追加すればマイクロ秒級のキャッシュヒットを得られる」という提案が出た。
最も適切な評価はどれか。
B. 強い整合性のある読み取りはDAXからDynamoDBへ渡され結果もキャッシュされないため、DAXによる高速化を期待しない
C. 強い整合性のある読み取りではDAXのクエリキャッシュだけが使用され、項目キャッシュは使用されない
D. DAXのTTLを長くすれば、強い整合性を維持したままキャッシュから応答できる
答えと解説
答え:B
DAXは強い整合性のある読み取りをDynamoDBへ渡し、その結果をキャッシュしません。したがって、
強い整合性のある読み取りが必須なら、DAXのキャッシュヒットによる高速化を前提にできません。
商品在庫の表示値をキャッシュする。
業務上許容できる古さは最大30秒で、元データは随時更新される。
TTL設計として最も適切なのはどれか。
B. TTLを設定せず、キャッシュされた値はソースが更新されても期限切れにしない
C. 許容できる古さが最大30秒ならTTLを30秒以下にし、必要なら更新時の無効化も組み合わせる
D. TTLを1秒未満に固定し、すべてのデータ種別で同じ値を使用する
答えと解説
答え:C
TTLは、
キャッシュヒット率
と
データ鮮度のトレードオフです。許容できる古さを超えるTTLを設定してはいけません。また、更新直後から新しい値が必要ならキャッシュ無効化も組み合わせます。
CloudFrontオリジンが個人向けレスポンスに、Cache-Control: no-store
を返している。
しかしディストリビューションのキャッシュポリシーでは、Minimum TTL = 60秒
になっている。
個人向けレスポンスをキャッシュさせないための最も適切な改善はどれか。
no-storeなどを尊重できる設定へ見直すB. Default TTLだけを0にし、Minimum TTLは60秒のまま維持する
C. Maximum TTLを長くして、
no-storeレスポンスをより長期間キャッシュするD. キャッシュ無効化を定期実行し、Minimum TTLの設定は変更しない
答えと解説
答え:A
現在のCloudFrontでは、
Minimum TTL > 0の場合、
no-cache
no-store
privateが存在してもMinimum TTLの期間はキャッシュされます。キャッシュしてはいけないレスポンスではCloudFront側のMinimum TTLも確認します。
ECサイトの商品価格を更新した。
商品価格は、
商品詳細
カテゴリ一覧
おすすめ一覧
など、共通URLパスを持たない多数のCloudFrontキャッシュオブジェクトに含まれている。
関連するオブジェクトだけを迅速に無効化したい。
2026年現在のCloudFrontで最も適切な方法はどれか。
B. 関連しないオブジェクトも含めて毎回
/*を無効化し、確実に全キャッシュを削除するC. TTLが切れるまで待ち、緊急更新でも明示的な無効化は使用しない
D. 関連オブジェクトへキャッシュタグを付与し、そのタグを指定してCloudFrontで無効化する
答えと解説
答え:D
現在のCloudFrontでは、キャッシュタグによる無効化を使用できます。URLパスが異なる関連コンテンツへ共通タグを付けることで、
必要な関連オブジェクトだけをまとめて無効化できます。
CloudFrontで長いTTLを設定した静的JavaScriptとCSSを配信している。
デプロイのたびに内容が変わり、利用者に新しい版を確実に参照させたい。
頻繁な更新に適した方法はどれか。
B. デプロイごとにディストリビューション全体を無効化し、すべてのオブジェクトを再取得させる
C. ファイル名やパスにバージョン識別子を含め、新しいURLを参照するように切り替える
D. キャッシュキーへランダムなクエリ文字列を常時追加し、同じファイルでも毎回別オブジェクトとして保存する
答えと解説
答え:C
頻繁な静的ファイル更新では、
app-v41.js
↓
app-v42.jsのようなバージョン付きファイル名を利用できます。新しいURLになるため、CloudFrontや利用者側に古いURLのキャッシュが残っていても、新しいファイルを参照できます。
アプリケーションはDAX経由でDynamoDBのQuery結果をキャッシュしている。PutItemで項目を追加した直後も、同じQueryが数分間古い結果を返すことがある。
最も適切な説明と改善はどれか。
B. DAXのクエリキャッシュは項目更新で自動無効化されないため、許容鮮度に合わせてTTLを調整する
C. 項目キャッシュTTLだけを短くすれば、QueryとScanのキャッシュ結果も同じタイミングで必ず更新される
D. DynamoDB側で強い整合性を有効化すれば、既存のDAXクエリキャッシュも即座に書き換えられる
答えと解説
答え:B
DAXでは、
項目キャッシュ
と
クエリキャッシュは別です。項目更新によって既存のQuery結果が自動的に更新されるわけではありません。したがって、クエリ結果の許容鮮度に合わせてクエリキャッシュTTLを設計します。
キャッシュヒットとキャッシュミスについて正しいものを2つ選択してください。
B. 有効なキャッシュエントリが見つかれば、元のデータソースへのアクセスを避けて応答できる
C. キャッシュキーへ値を追加するほど、必ずキャッシュヒット率は高くなる
D. TTLを長くすれば、データ鮮度に関係なく常に最適なキャッシュ戦略になる
E. キャッシュミスでは元のデータソースから取得し、その結果をキャッシュへ格納する設計がある
F. キャッシュエントリはTTLでしか無効化できず、明示的な削除や無効化はできない
答えと解説
答え:B / E
キャッシュヒットでは、有効なコピーを再利用することで元データソースへのアクセスを削減できます。キャッシュミス時にソースから取得し、次回の読み取りのためキャッシュする方式が遅延読み取りです。