SAA-C03弾力性に優れたアーキテクチャの設計HARD単一選択

ある企業が、Amazon SQS を使って EC2 で動作するメッセージ処理ワーカーとのキューイングアーキテクチャを構築している。メッセージ処理が成功した場合は SQS からメッセージを削除するが、処理に失敗したメッセージは最大 3 回リトライされた後に別の場所で保管し、後から手動で分析・再処理できるようにしたい。最も適切な構成はどれか。

  1. A. SQS キューにデッドレターキュー(DLQ)を設定し、最大受信回数(maxReceiveCount)を 3 に設定する。処理に 3 回失敗したメッセージは自動的に DLQ に移動される。
  2. B. SQS の可視性タイムアウトを 0 に設定して失敗したメッセージをすぐに再取得できるようにし、ワーカーが無制限にリトライする。
  3. C. 処理に失敗したメッセージを Lambda 関数でキャッチし、別の SQS キューに手動で送信するコードをワーカーに実装する。
  4. D. S3 にメッセージのコピーを常に書き込んでからキューに送信し、失敗時は S3 からメッセージを再取得する。
解答と解説を見る

正解: A

SQS の Dead-Letter Queue(DLQ)機能を使うと、処理に失敗して maxReceiveCount 回(ここでは 3 回)以上受信されたメッセージが自動的に DLQ に移動される。DLQ は通常の SQS キューであり、失敗メッセージを保管・分析・再処理するための標準的なパターンである。コードの変更不要で設定だけで実現できる。選択肢Cはワーカーコードに失敗検知と DLQ への転送ロジックを追加する方法で、コード変更が必要で実装が複雑になる。SQS の DLQ 機能を使えばコード不要で同じことが実現できる。選択肢Bは可視性タイムアウトを 0 にすることで、メッセージが他のワーカーに即座に見えるようになってしまい、重複処理の問題が発生する。また無制限リトライは意図的な動作制御ができない。選択肢DはS3へのコピー書き込みが必須になり、すべてのメッセージに対して S3 操作のコストが発生し、失敗処理のための標準的な SQS 機能を使わない非効率な設計である。

▸ この試験を本気で演習する(全150問・無料)