【図解】AWS Batchの用語整理
はじめに
AWS Batchが大規模なバッチコンピューティング環境を提供するサービスです。
今回は、AWS batchの仕組みを理解するための不可欠なキーワードをまとめます。
今回の記事で分かること
- AWS Batchでのジョブ実行の仕組み
- 主要な構成要素の定義と連携
- バッチ処理のフローや実行状態
AWS Batchとは
大規模バッチ処理のための環境をフルマネージドで提供。
AWS Batchがインスタンスの起動や停止を行うため、スケジューラや計算ノードなどの管理不要。

AWS Batchの全体像:ジョブ実行の自動化
AWS Batchは、ユーザーが投入した「ジョブ」をコンピューティング環境というリソースプールで自動的に実行・管理します。
仕組みの核:投入と実行の分離
AWS Batchは、ジョブの投入(Job Queue)とジョブの実行(Compute Environment)のプロセスを分離しています。これにより、大量のジョブを効率的に処理し、リソースの利用を最適化します。

処理の基本単位:ジョブとジョブ定義
AWS BAtchでの作業はコンテナをベースに行われます。
ジョブ(Job)
AWS Batchが実行する作業の最小単位です。これは、特定のコマンドを実行するためにジョブキューに投入されるリクエストです。
特徴
ジョブは必ずDockerコンテナイメージに基づいて実行されます。これにより、実行環境の再現性が保証されます。

ジョブ定義(Job Definition)
ジョブの実行方法を定義する設計図です。ジョブを投入する際には、必ずこの定義を参照します。
定義内容
実行するコンテナイメージ、必要なリソース(vCPU、メモリ)、IAMロール、ジョブが失敗した場合のリトライ戦略などを細かく設定します。
役割
ジョブ定義は、アプリケーションのコードと、実行に必要なインフラ設定を分離する役割を持ちます。

ジョブの流れを管理:ジョブキュー(Job Queue)
ジョブキューは、ユーザーから投入されたジョブが実行を待つための待ち行列です。
ジョブキューの役割
- 投入窓口:ユーザーは、実行したいジョブをジョブ定義を参照してジョブキューに投入します。
- 優先度管理:複数のジョブキューを作成し、キューごとに優先度を設定できます。これにより、緊急性の高いジョブを優先的に処理できます。

実行環境の自動調整:コンピューティング環境
コンピューティング環境は、実際にジョブを実行するための計算リソースのプールです。AWS Batchの最大の特徴であるフルマネージドのスケーリングを担います。
コンピューティング環境の役割
- リソースの提供:EC2インスタンスまたはAWS Fargateのどちらかをリソースとして使用するかを指定します。
- 自動スケーリング:ジョブキューにジョブがたまると、AWS Batchはこの環境内のEC2インスタンスなどを自動で起動し、リソースが空くと自動で停止・終了させます。
- コスト最適化:スポットインスタンスを柔軟に利用したり、ジョブのリソース要件に最適なインスタンスタイプを選択したりすることで、リソース利用率とコスト効率を最大化します。
AWS Batchの実行フロー
AWS Batchは、以下のシンプルな流れでバッチ処理を自動化します。
- 定義:ユーザーがジョブ定義を作成し、実行イメージやリソース要件を定義します。
- 投入:ジョブをジョブキューに送信します。
- スケジューリング:AWS Batchはジョブキューを監視し、優先度とリソース要件に基づき、コンピューティング環境にジョブを割り当てます。
- 実行とスケーリング:コンピューティング環境は、割り当てられたジョブを実行するために必要なEC2/Fargateインスタンスを自動で起動・停止させながら、コンテナとしてジョブを実行します。
ジョブの状態

| 状態 | 説明 |
|---|---|
| SUBMITTED | キューに送信されたが、まだスケジューラによって評価れていない |
| PENDING | ジョブはキュー内にあり、別のジョブやリソースへの依存関係があるためまだ実行できていない |
| RUNNABLE | スケジューラの評価が完了し、ホストにスケジューリングされる準備ができている |
| STARTING | ジョブはホストにスケジュールされており、関連するコンテナ初期化操作が進行中 |
| RUNNING | ジョブが実行中 |
| SUCCEEDED | 終了コード0でジョブが正常に終了 |
| FAILED | 利用可能な再試行すべてで、終了コード0以外でジョブが終了 |
配分戦略
AWS Batchはジョブのニーズに最も適したインスタンスタイプを指定されたインスタンスタイプから選択。配分戦略は、追加のキャパシティを必要とする場合の動作を定義。
BEST_FIT(デフォルト)
最もコストの低いインスタンスタイプを優先して、ジョブのニーズに最も適したインスタンスタイプを選択。選択したインスタンスタイプの追加インスタンスが利用できない場合、AWS Batchは追加インスタンスが利用可能になるまで待機。

BEST_FIT_PROGRESSIVE
キュー内のジョブの要件を満たすのに十分な大きさのインスタンスタイプを追加で選択。単位vCPUあたりのコストが低いインスタンスが優先。

SPOT_CAPACITY_OPTIMIZED
キュー内のジョブの要件を満たすのに十分な大きさのインスタンスタイプを1つ以上選択。中断する可能性が低いインスタンスタイプが優先。

SPOT_PRICE_CAPACITY_OPTIMIZED
価格とキャパシティの両方を考慮して、中断される可能性が最も低く、価格ができるだけ低いスポットインスタンスプールを選択。スポットインスタンスのコンピューティングリソースでのみ使用可能。

まとめ
- AWS Batchはフルマネージドのバッチ処理サービスで、大規模ジョブを自動的にスケジュール・実行
- ジョブをジョブキューに投入 → キューがコンピュート環境にジョブを割り当て → ジョブ定義に従って処理実行
- EC2やFargateを自動スケーリングして、コスト効率よくリソースを利用可能
Discussion