Q53 — AWS DOP-C02 第3章
第 53/100 問 | ← 第3章
ある宇宙探査会社は、複数の衛星からテレメトリデータを受信しています。これらのデータパケットは Amazon API Gateway 経由で受信され、直接 Amazon Simple Queue Service(Amazon SQS)標準キューに送信されます。対応するアプリケーションがキューをサブスクライブし、データを標準形式に変換します。 衛星から送信されるデータの不整合により、アプリケーションがデータ変換に失敗することがあります。このような場合、メッセージは SQS キュー内に残ります。DevOps エンジニアは、失敗したメッセージを保持し、科学者がそれらを確認・さらに処理できるようにするソリューションを開発する必要があります。 これらの要件を満たすソリューションはどれですか?
- A. AWS Lambda を使用して SQS キューをポーリングし、Lambda 関数を呼び出してキュー内のメッセージが有効かどうかをチェックします。検証に失敗した場合、無効なデータのコピーを Amazon S3 バケットに送信し、科学者が確認・修正できるようにします。データが修正された後、修正済みデータを使用して SQS キュー内のメッセージを再送信する Lambda 関数を実行します。
- B. SQS 標準キューを SQS FIFO キューに変換します。Amazon EventBridge スケジュールを使用して、AWS Lambda を 10 分ごとに SQS キューをポーリングするよう設定します。Lambda 関数を呼び出して `SentTimestamp` 値が 5 分を超えるメッセージを特定し、データをアプリケーションの出力先と同じ場所にプッシュし、キューからメッセージを削除します。
- C. SQS デッドレターキュー(DLQ)を作成します。既存のキューを再ドライバーポリシー(re-drive policy)を含むように変更し、最大受信回数(maxReceiveCount)を 1 に設定し、デッドレターキューの ARN を新しく作成したキューの ARN に設定します。科学者にデッドレターキューを使用して無効なデータを確認させ、その後再処理を行います。 ✓
- D. API Gateway を設定して、各衛星ごとに異なる名前の SQS 仮想キューにメッセージを送信します。アプリケーションを更新し、変換できないデータに対して新しい仮想キューを使用し、メッセージを新しい仮想キューに送信します。科学者に仮想キューを使用して無効なデータを確認させ、その後再処理を行います。
正解: C. SQS デッドレターキュー(DLQ)を作成します。既存のキューを再ドライバーポリシー(re-drive policy)を含むように変更し、最大受信回数(maxReceiveCount)を 1 に設定し、デッドレターキューの ARN を新しく作成したキューの ARN に設定します。科学者にデッドレターキューを使用して無効なデータを確認させ、その後再処理を行います。
解説
AWS SQS のデッドレターキュー(Dead-Letter Queue, DLQ)は、コンシューマーが正しく処理できないメッセージを保存するために使用されます。本問では、アプリケーションの処理失敗時にメッセージが元のキューに残留すると、無限ループや削除のリスクがあります。最大受信回数(maxReceiveCount)を 1 に設定することで、メッセージが最初に処理失敗した際に自動的に DLQ にルーティングされます。デッドレターキューは、失敗メッセージを独立して保存・アクセス可能にし、元のキューのブロッキングを回避します。AWS 公式ドキュメントでは、DLQ は失敗メッセージを処理する標準的な手法であり、カスタムロジックや手動介入を必要としません。オプション C は SQS のネイティブ機能を直接活用して要件を満たしており、他のオプション(S3、EventBridge の導入など)や非標準的な手法(仮想キュー)は、複雑性と保守コストを増加させます。