ある企業が、AWS Lambda 関数で大量の S3 オブジェクト(1 ファイル 500KB 程度、1 バッチで 10,000 件)を並列処理したい。処理の進捗を追跡し、すべての処理が完了した後に集計処理を実行したい。最小限のコードで実現できる最も適切なオーケストレーション手段はどれか。
- A. AWS Step Functions の Map ステートを使用して、10,000 件のアイテムを並列処理し(maxConcurrency を設定)、すべての処理完了後に集計ステートに遷移する。
- B. Amazon SQS に 10,000 件のメッセージを送信し、Lambda を SQS トリガーで実行する。別の Lambda 関数が SQS キューを定期的にポーリングして残件数が 0 になったら集計処理を起動する。
- C. EC2 インスタンスで 10,000 個のスレッドを使って並列処理する。
- D. Amazon EventBridge でスケジュールルールを作成して 10,000 件の Lambda を起動し、CloudWatch メトリクスで完了を検知する。
解答と解説を見る
正解: A
AWS Step Functions の Map ステートは配列の各要素に対して並列処理を実行し、すべての処理完了を自動的に待機してから次のステートに遷移する。maxConcurrency で同時実行数を制御でき、エラーハンドリングも宣言的に設定できる。10,000 件の並列処理と集計の「オーケストレーション」にはStep Functions が最適解。選択肢BのSQS + Lambda も有効だが、「全件完了後に集計」を正確に実装するには DynamoDB などでカウンターを管理するカスタムロジックが必要で、コード量が多くなる。選択肢DのEventBridge スケジュールは一度のバッチ起動とリアルタイム完了検知には向かない。設計も複雑になる。選択肢CのEC2 マルチスレッドはサーバーレスの利点を失い、インスタンス管理コストも発生する。10,000 スレッドの同時実行はリソース管理が困難。
📚 関連サービスの解説: AWS Step Functions