あるヘルスケア企業が、患者の検査結果ファイルがS3にアップロードされると自動で複数の処理(OCR変換・暗号化・通知メール送信)が並列に実行されるシステムを設計している。処理の独立性を保ちながら、1つの処理が失敗しても他の処理に影響しない構成を2つ選択してください。
- A. S3イベント通知をKinesis Data Streamsに送信し、Lambda関数が1シャードを処理する
- B. S3イベント通知をSNSトピックに送信し、SNSトピックに3つのSQSキューをサブスクライブする(SNS→SQSファンアウト)。各SQSキューに対応するLambdaを接続する
- C. S3イベント通知を直接3つのLambda関数に設定し、並列トリガーを有効にする
- D. S3イベント通知でStep Functionsを起動し、Parallelステートで3つの処理を並列実行する
- E. S3イベント通知でEventBridgeルールを複数設定し、同じS3イベントパターンに対してそれぞれ別のターゲット(Lambda)を設定する
解答と解説を見る
正解: B, E
SNS→SQSファンアウトパターン(B)は、SNSが各SQSキューに独立してメッセージを配信するため、1つのSQSキュー(下流処理)が失敗しても他のキューには影響しない。SQSがバッファとして機能するため再処理も容易である。EventBridgeの複数ルール(E)は同一イベントパターンに対して複数ターゲットを設定でき、各Lambdaは独立して呼び出されるため1つの失敗が他に影響しない。CのS3からの直接並列Lambda起動はS3イベント通知の制約(同一イベント種別・プレフィックス・サフィックスの組み合わせに対して送信先は1つのみ設定可能)により実現できない。DのStep Functions Parallelステートは並列実行できるが、1つのブランチが失敗するとデフォルトでワークフロー全体が失敗するため「他の処理に影響しない」要件を満たしにくい(Catch設定で個別エラーハンドリングは可能だが複雑になる)。AのKinesis Data Streamsは順序保証ストリーミング向けで、ファンアウト(複数処理への並列配信)には適しておらず過剰な複雑さを追加する。
📚 関連サービスの解説: Amazon S3 ・ Amazon SNS