DVA-C02:AWS Certified Developer - Associate AWS サービスを用いた開発 問2
AWS サービスを用いた開発/AWS でホストされるアプリのコード開発Amazon SQS の標準キューからメッセージを受信するコンシューマーで、同一メッセージが複数回配信されても二重処理にならないようにしたいと考えています。最も適切な設計はどれですか。
当サイトのオリジナル問題(DVA-C02:AWS Certified Developer - Associateの出題範囲「AWS サービスを用いた開発」に対応。実際の試験問題ではありません)
- A可視性タイムアウトを 0 に設定する
- B処理を冪等(idempotent)に設計し、メッセージ ID や業務上の一意キーで重複を検知して重複分をスキップする
- Cメッセージを受信したら処理の前に即座に削除する
- D標準キューでは重複配信は起きないので対策は不要と考える
正解:B
解説
Amazon SQS の標準キューは、高いスループットと引き換えに「少なくとも1回(at-least-once)」の配信を提供し、まれに同一メッセージが複数回届くことがあります。そのため、コンシューマー側の処理を冪等(同じメッセージを複数回処理しても結果が変わらない)に設計し、メッセージ ID や業務上の一意キーで重複を検知してスキップするのが定石です。
選択肢ごとの解説
- A誤り。可視性タイムアウトを 0 にすると、処理中のメッセージが他のコンシューマーにも配信され、重複処理がむしろ増えます。
- B正しい。処理を冪等に設計し、一意キーで重複を検知してスキップすれば、複数回配信されても二重処理になりません。
- C誤り。処理前に削除すると、処理に失敗したときにメッセージが失われます。
- D誤り。標準キューは少なくとも1回の配信で重複が起こり得るため、対策は必要です。