Q5 — AWS SAA-C03 第1章

第 5/65 問 | ← 第1章

Q5. ある企業がアプリケーションを複数のAmazon EC2インスタンス上でホストしています。このアプリケーションは、Amazon SQSキューからメッセージを処理し、Amazon RDSテーブルに書き込み、その後キューからそのメッセージを削除します。SQSキュー自体には重複するメッセージは存在しませんが、RDSテーブルに時折重複レコードが見つかります。ソリューションアーキテクトは、メッセージが1回だけ処理されるようにするために何を行うべきでしょうか?

正解: D. ChangeMessageVisibility API呼び出しを使用して可視性タイムアウトを延長する

解説

Q5. アプリケーションがAmazon SQSキューからメッセージを受信・処理し、Amazon RDSテーブルへ書き込んだ後にキューからメッセージを削除するというフローにおいて、SQSキュー内に重複メッセージがないにもかかわらずRDSに重複レコードが発生している場合、根本原因は「メッセージの重複処理(duplicate processing)」です。これは、SQSの可視性タイムアウト(visibility timeout)が短すぎると、メッセージが正常に処理・削除される前に再びキューに表示され、別のEC2インスタンスによって再処理されるためです。この状況を防ぐには、メッセージが完全に処理・削除されるまでの十分な猶予(=可視性タイムアウト)を確保する必要があります。オプションを検討します:Aは新規キュー作成であり、既存の処理ロジックの問題には無関係です。Bはアクセス制御に関するもので、重複処理防止には寄与しません。Cの待機時間(wait time)は、Long Polling時の応答遅延を調整するものであり、処理の冪等性や重複防止とは直接関係ありません。DのChangeMessageVisibility APIによる可視性タイムアウトの延長は、メッセージが処理中に他のコンシューマーに再取得されないようにし、結果として同一メッセージの二重処理を防ぐ最も直接的な対策です。ただし、完全な解決にはアプリケーション側での冪等性設計(例:RDSへのINSERT前に主キー/ユニークキーによる存在チェック)も推奨されますが、提示された選択肢の中で、AWSサービス側で即座に実施可能な技術的対応として最も適切なのはDです。