AWS Batch

数十万件規模のバッチ処理ジョブを自動的にスケジューリングし、最適なコンピューティングリソースで実行するフルマネージドサービス

概要

AWS Batch は、バッチコンピューティングワークロードの計画、スケジューリング、実行を自動化するフルマネージドサービスです。ジョブキューにジョブを投入すると、Batch が必要なコンピューティングリソース (EC2 インスタンスまたは Fargate) を自動的にプロビジョニングし、ジョブの依存関係を解決しながら最適な順序で実行します。ゲノム解析、金融リスク計算、動画エンコード、機械学習の前処理など、大量の計算を並列実行する必要があるワークロードに適しています。スポットインスタンスとの統合により、コストを大幅に削減できます。

EC2 と Fargate のコンピューティング環境

AWS Batch のコンピューティング環境は、ジョブを実行するインフラストラクチャを定義します。EC2 ベースの環境では、インスタンスタイプ、最小・最大 vCPU 数、スポットインスタンスの利用有無を指定します。Fargate ベースの環境はインスタンス管理が不要で、ジョブごとに必要な vCPU とメモリを指定するだけで実行できます。選択基準は明確で、GPU が必要な場合、特定のインスタンスタイプが必要な場合、またはマルチノード並列ジョブ (MPI) を使う HPC ワークロードでは EC2 を選択し、それ以外は Fargate を選択します。EC2 環境でスポットインスタンスを使う場合、Batch は自動的にスポットの中断を検知してジョブを別のインスタンスにリスケジュールするため、中断耐性のあるワークロードであれば最大 90% のコスト削減が可能です。Azure Batch も同様のジョブスケジューリングを提供しますが、Fargate のようなサーバーレスオプションがなく常に VM プールの管理が必要な点で、AWS Batch の方が運用負荷を軽減しやすい設計です。

ジョブキューと依存関係の制御

Batch のジョブスケジューリングは、ジョブキューとジョブ定義の 2 つの概念で構成されます。ジョブキューには優先度を設定でき、高優先度キューのジョブが低優先度キューより先に実行されます。1 つのジョブキューに複数のコンピューティング環境を関連付けることで、オンデマンドインスタンスが不足した場合にスポットインスタンスにフォールバックする構成が可能です。ジョブ間の依存関係は、ジョブ投入時に依存先のジョブ ID を指定するだけで Batch が実行順序を自動的に解決します。配列ジョブ (Array Job) を使えば、同一のジョブ定義で数千のジョブを一括投入でき、各ジョブにはインデックス番号が割り当てられるため、S3 上のファイルリストの何番目を処理するかをインデックスで制御する設計が一般的です。バッチ処理の関連書籍 (Amazon) も参考になります。

Step Functions 連携とリトライ戦略

AWS Batch の典型的な活用は、データパイプラインの大規模並列処理です。S3 に到着した数千件のファイルを EventBridge で検知し、Step Functions 経由で Batch ジョブを投入、各ファイルを並列に処理して結果を S3 に書き戻す構成が一般的です。Step Functions との統合により、Batch ジョブの完了を待機し、成功・失敗に応じて後続の処理を分岐させるワークフローを宣言的に定義できます。ジョブ定義ではリトライ戦略 (最大リトライ回数、リトライ条件) を設定でき、一時的なエラーによるジョブ失敗を自動的にリカバリできます。リトライ条件には終了コードやエラーメッセージのパターンを指定でき、特定のエラー (メモリ不足など) だけをリトライ対象にする細かい制御が可能です。コスト最適化のポイントとして、ジョブのタイムアウトを適切に設定し、ハングしたジョブが無限にリソースを消費し続ける事態を防ぐことが重要です。

共有するXB!