あるEコマース企業は、注文処理システムをAmazon SQSとAWS Lambdaを使用して構築しています。注文メッセージはSQSキューに配置され、Lambda関数が外部決済APIを呼び出して処理します。外部APIへの一時的な障害により処理が失敗するケースがあります。失敗したメッセージを失わず、一時的なエラーはリトライし、永続的な失敗メッセージは隔離して、正常なメッセージの処理をブロックしないようにするための最適な設計はどれですか?
AWS は SQS の可視性タイムアウトを Lambda 関数のタイムアウトの6倍以上に設定することを推奨しています。タイムアウトが短すぎると処理中のメッセージがキューに戻り重複処理が発生します。DLQ と maxReceiveCount により規定回数を超えたメッセージは隔離されます。SQS 標準キューは FIFO と異なり並列処理が可能で他のメッセージの処理をブロックしません。 選択肢A の SQS FIFO キューと同時実行数1は、スループットを著しく低下させ要件に反します。 選択肢C の SQS の可視性タイムアウトを Lambda 関数のタイムアウトと同じ値に設定することは、タイムアウトが短すぎるため重複処理が発生します。 選択肢D の DLQ を設定しないため永続的な失敗メッセージの隔離ができず、EventBridge を介した再処理は構成が複雑で SQS 組み込みのリトライ・隔離機能を活用できていません。