AWS Batch
数十万件規模のバッチ処理ジョブを自動的にスケジューリングし、最適なコンピューティングリソースで実行するフルマネージドサービス
概要
AWS Batch は、バッチコンピューティングワークロードの計画、スケジューリング、実行を自動化するフルマネージドサービスです。ジョブキューにジョブを投入すると、Batch が必要なコンピューティングリソース (EC2 インスタンスまたは Fargate) を自動的にプロビジョニングし、ジョブの依存関係を解決しながら最適な順序で実行します。ゲノム解析、金融リスク計算、動画エンコード、機械学習の前処理など、大量の計算を並列実行する必要があるワークロードに適しています。スポットインスタンスとの統合により、コストを削減できます。
EC2 と Fargate のコンピューティング環境
AWS Batch のコンピューティング環境は、ジョブを実行するインフラストラクチャを定義します。EC2 ベースの環境では、インスタンスタイプ、最小・最大 vCPU 数、スポットインスタンスの利用有無を指定します。Fargate ベースの環境はインスタンス管理が不要で、ジョブごとに必要な vCPU とメモリを指定するだけで実行できます。選択の目安として、GPU が必要な場合、特定のインスタンスタイプが必要な場合、またはマルチノード並列ジョブ (MPI) を使う HPC ワークロードでは EC2 が候補になり、それ以外では Fargate も選択肢になります。EC2 環境でスポットインスタンスを使う場合、リトライ戦略を設定しておけば中断で失敗したジョブを別のインスタンスで再実行させることができ、中断耐性のあるワークロードであればオンデマンド比でコストを削減できます (割引率は AWS 公式の料金ページ参照)。Azure Batch も同様のジョブスケジューリングを提供します。AWS Batch では Fargate ベースの環境を選ぶことでインスタンス管理を不要にできます。
ジョブキューと依存関係の制御
Batch のジョブスケジューリングは、ジョブキューとジョブ定義の 2 つの概念で構成されます。ジョブキューには優先度を設定でき、高優先度キューのジョブが低優先度キューより先に実行されます。1 つのジョブキューに複数のコンピューティング環境を関連付けることで、オンデマンドインスタンスが不足した場合にスポットインスタンスにフォールバックする構成が可能です。ジョブ間の依存関係は、ジョブ投入時に依存先のジョブ ID を指定するだけで Batch が実行順序を自動的に解決します。配列ジョブ (Array Job) を使えば、同一のジョブ定義で数千のジョブを一括投入でき、各ジョブにはインデックス番号が割り当てられるため、S3 上のファイルリストの何番目を処理するかをインデックスで制御する設計が採られます。
Step Functions 連携とリトライ戦略
AWS Batch の典型的な活用は、データパイプラインの大規模並列処理です。S3 に到着した数千件のファイルを EventBridge で検知し、Step Functions 経由で Batch ジョブを投入、各ファイルを並列に処理して結果を S3 に書き戻す構成が代表例です。Step Functions との統合により、Batch ジョブの完了を待機し、成功・失敗に応じて後続の処理を分岐させるワークフローを宣言的に定義できます。ジョブ定義ではリトライ戦略 (最大リトライ回数、リトライ条件) を設定でき、一時的なエラーによるジョブ失敗を自動的にリカバリできます。リトライ条件には終了コードやエラーメッセージのパターンを指定でき、特定のエラー (メモリ不足など) だけをリトライ対象にする細かい制御が可能です。コスト最適化のポイントとして、ジョブのタイムアウトを適切に設定し、ハングしたジョブが無限にリソースを消費し続ける事態を防ぐことが重要です。
参考資料 (AWS 公式)
本ページの一次情報は AWS 公式サイトおよび公式ドキュメントです。最新の仕様 / 料金は次の公式ページで確認できます。
本ページと公式ドキュメントの記述が食い違う場合は、公式ドキュメントを正としてください。