Q78 — AWS SAA-C03 第16章

第 78/100 問 | ← 第16章

Q1278. ある会社が、Amazon EC2インスタンス上でWebアプリケーションを実行しています。このアプリケーションは、Amazon DynamoDBテーブルも使用しています。アプリケーションでは、断続的にHTTP 500エラーが発生しています。DynamoDBテーブルはオンデマンドモードで動作しており、他のアプリケーションでも同一のテーブルを問題なく使用しています。ソリューションアーキテクトは、Webアプリケーションへの影響を最小限に抑えつつ、このHTTP 500エラーを解消したいと考えています。これらの要件を満たすソリューションはどれでしょうか?

正解: C. アプリケーションを設定して、指数バックオフと再試行を用いてテーブルをクエリするようにします。

解説

正しい解決策は、DynamoDBによる制限(throttling)や一時的な障害によって引き起こされる断続的なHTTP 500エラーに対処しつつ、アプリケーションへの影響を最小限に抑える必要があります。各選択肢を検討します。 正解:C.アプリケーションを設定して、指数バックオフと再試行を用いてテーブルをクエリするようにします。 なぜCが最適か: ・制限(throttling)および一時的障害への対応:HTTP 500エラーは、オンデマンドモードにおけるバースト時のキャパシティ制限や、ネットワークの一時的障害などにより発生することが多く、指数バックオフと再試行により、失敗したリクエストを自動的に遅延付きで再送信することで、再び制限される可能性を低減できます。 ・DynamoDBの構成変更不要:書き込みキャパシティの調整(A)やDynamoDB Streamsの有効化(B)とは異なり、この解決策はアプリケーション側の変更のみで済みます。 ・オンデマンドモードとの互換性:オンデマンドテーブルは自動スケーリングされますが、急激なトラフィック増加時には依然として制限が発生しうるため、再試行はバーストを緩和するのに有効です。 ・リスクが低く、非妨害的:他のアプリケーションに影響を与えず(例:強力な一貫性のある読み取りはレイテンシとコストを増加させる)、既存の運用を中断しません。 他の選択肢が不適切な理由: A.DynamoDBを設定して、より大きな書き込みリクエストをサポートし、スループットを向上させます。  → 不要:オンデマンドモードではトラフィックに応じて自動スケーリングが行われるため、手動での書き込みキャパシティ調整は不適切です。また、HTTP 500エラーの多くは読み取り負荷(例:大量のGETリクエスト)由来であり、書き込みスループットの向上は無関係です。さらに、一時的障害(例:ネットワークタイムアウト)への対応には再試行が必要であり、単なるスループット増加では解決しません。 B.DynamoDB Streamsを有効化して、テーブル内の変更を監視します。  → 用途のミスマッチ:DynamoDB Streamsは、テーブルの変更をキャプチャしてLambdaトリガー・アナリティクスなどに活用する機能であり、エラー処理や制限対策には一切関係ありません。 D.アプリケーションを設定して、強力な一貫性のある読み取り(strongly consistent reads)を使用するようにします。  → パフォーマンス悪化:強力な一貫性のある読み取りは、レイテンシとコスト(RCU消費量が通常の2倍)を増加させます。また、制限(throttling)が原因のHTTP 500エラーに対しては、根本的な解決にはならず、むしろRCU消費を増加させ、制限を助長する可能性があります。 要点比較: 要件|指数バックオフ+再試行(C)|他の選択肢 HTTP 500/制限の解消|✓(失敗リクエストを再試行)|A:不要;B:無関係;D:無効 アプリケーションへの非妨害性|✓(コード変更のみ)|A:効果不明;D:レイテンシ増加 オンデマンドモードとの適合性|✓(自動スケーリング+再試行)|A:手動調整;B:エラー対策不可 結論:選択肢Cは、以下の点で唯一の適切な解決策です。 ・制限や一時的障害による失敗リクエストを自動的に再試行できる。 ・DynamoDBの構成変更を一切必要とせず、最小限のアプリケーション変更で実現可能。 ・同一DynamoDBテーブルを利用する他のアプリケーションに一切影響を与えない。 最終的な正解:C