AWS Batch
大規模なバッチコンピューティングジョブを効率的に実行するフルマネージドサービス
何ができるか
AWS Batch は、数十万件規模のバッチコンピューティングジョブを効率的に計画・スケジュール・実行できるフルマネージドサービスです。ジョブの量と要件に応じて EC2 インスタンスや Fargate のコンピューティングリソースを自動的にプロビジョニング・スケーリングします。ジョブキュー、ジョブ定義、コンピューティング環境を設定するだけで、複雑なバッチ処理インフラの管理から解放されます。Docker コンテナベースのジョブ実行に対応しており、既存のバッチアプリケーションをそのまま移行できます。
どのような場面で使うか
ゲノム解析や創薬シミュレーションなどのハイパフォーマンスコンピューティング、大量の画像・動画のトランスコード処理、金融リスク計算やモンテカルロシミュレーション、機械学習モデルの大規模トレーニングジョブ、ETL パイプラインでの大量データ変換処理など、大規模な並列処理が必要なワークロード全般で利用されています。 この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。
身近な例え
大型洗濯工場に例えるとわかりやすいでしょう。家庭の洗濯機 (単一サーバー) では大量の洗濯物を処理しきれません。洗濯工場 (AWS Batch) なら、洗濯物の量に応じて洗濯機の台数を自動で増減し、種類ごとに適切な洗い方 (ジョブ定義) で効率的に処理してくれます。洗濯物がなくなれば機械は止まり、電気代もかかりません。
AWS Batch とは
AWS Batch は、バッチコンピューティングワークロードの実行基盤をフルマネージドで提供するサービスです。従来のバッチ処理では、ジョブスケジューラの構築、クラスタの管理、リソースのスケーリングなど多くの運用負荷がありました。AWS Batch はこれらを自動化し、開発者はジョブのロジックに集中できます。EC2 のオンデマンドインスタンスやスポットインスタンス、Fargate を柔軟に組み合わせてコスト最適化を図れます。
ジョブの管理と依存関係
AWS Batch ではジョブ定義、ジョブキュー、コンピューティング環境の 3 つのコンポーネントでバッチ処理を構成します。ジョブ定義では Docker イメージ、vCPU、メモリ、環境変数などを指定します。ジョブ間の依存関係を定義でき、前段のジョブが完了してから次のジョブを実行する DAG (有向非巡回グラフ) 型のワークフローを構築できます。配列ジョブ機能を使えば、パラメータの異なる数千のジョブを一括投入することも可能です。
コスト最適化
AWS Batch はスポットインスタンスとの統合により、オンデマンド料金の最大 90% 割引でバッチ処理を実行できます。コンピューティング環境でスポットインスタンスの利用を有効にするだけで、Batch が自動的にスポット容量を確保し、中断時のリトライも管理します。また、Fargate を使えばインスタンス管理が不要になり、ジョブ単位の課金でさらにコスト効率を高められます。ジョブがない時間帯はリソースがゼロにスケールダウンするため、無駄なコストが発生しません。
Azure・オンプレミスとの比較
AWS の優位点
- EC2 スポットインスタンスとのネイティブ統合により最大 90% のコスト削減が可能で、中断時の自動リトライも組み込まれているためスポット運用の複雑さを意識せずに済む
- Docker コンテナベースのジョブ実行に標準対応しており、既存のコンテナ化されたバッチアプリケーションをコード変更なしにそのまま移行できる
- ジョブがない時間帯はコンピューティングリソースがゼロにスケールダウンするため、常時稼働のクラスタと比較して待機コストが一切発生しない
注意点
- スポットインスタンスを利用する場合、ジョブの中断に備えてチェックポイント機能やリトライ戦略を設計しておくこと
- ジョブの実行時間が 15 分以内であれば Lambda の方がシンプルかつ低コストになる場合があるため、ワークロードに応じて使い分けること
さらに詳しく知りたい方は、関連書籍 (Amazon) で理解を深められます。