【SAA-C03 模擬】ピーク時に数千件が集中する画像処理を取りこぼさず、失敗分を分離して再処理できる構成は?
ある写真共有サービスでは、ユーザーがアップロードした画像をS3バケットに保存し、その直後にサムネイルを生成しています。処理には1件あたり最大3分かかります。イベント時にはアップロードが毎分数千件に集中し、その他の時間帯はほとんど発生しません。要件は次のとおりです。(1) 集中時にも処理を取りこぼさず、順次処理できること。(2) 一時的なエラーは自動で再試行し、規定回数失敗したものは本流から分離して後で調査・再処理できること。(3) サーバー管理をなくし、運用負荷とコストを最小にすること。
これらの要件を満たすアーキテクチャとして最も適切なものはどれですか。
これらの要件を満たすアーキテクチャとして最も適切なものはどれですか。
正解: B
正解はBです。S3からSQSキューへイベントを送ることで、ピーク時のイベントはキューにバッファされ、Lambdaはキューをポーリングして同時実行数の範囲内で順次処理します。処理に失敗したメッセージは可視性タイムアウト後に再びキューへ戻って自動で再試行され、maxReceiveCountを超えたものはデッドレターキューへ移動して本流から分離されます。Lambdaのタイムアウトは最大15分なので3分の処理にも十分で、サーバー管理は不要です。
AはS3からの非同期呼び出しでも一定の再試行はありますが、関数内でのループはタイムアウトや二重処理の原因になり、失敗分の分離やスロットリング時の制御が難しくなります。CはEC2の管理が必要で、ポーリングによる遅延とリスト操作のコストも発生します。DはS3のイベント通知の直接の送信先にKinesis Data Streamsを指定できず、EC2コンシューマーの運用も必要になるため不適切です。