目次
AWS Batch 完全ガイド v2.0
初心者から実務者向けの包括的解説
ドキュメントの目的
本ガイドは以下を対象としています。
- 初心者向け: AWS Batch とは何か、バッチジョブの自動化とは何かを学びたい方
- 開発者・SRE 向け: ジョブキューの構成、コンピューティング環境のセットアップ、ジョブ依存関係の実装を習得したい方
- データエンジニア向け: 大規模データ処理パイプライン(ETL)、機械学習訓練ジョブの並列実行、ゲノミクス解析を実装したい方
- アーキテクト向け: Batch vs Lambda vs ECS vs Kubernetes の選定基準、マルチノード並列処理の設計を理解したい方
2026 年の AWS Batch エコシステム
- SageMaker Training Job Queuing:AWS Batch で ML 訓練ジョブをキュー管理。データサイエンティストが優先度付きで投入可能
- EKS クラスターのジョブキューイング:EC2・Fargate・EKS にまたがるワークロード統合管理
- Spot Capacity Rebalancing:スポットインスタンスの中断警告に自動対応。置換インスタンスを事前起動
- Fair-Share Scheduling:マルチテナント環境で複数チームのジョブ公平配分(Share Identifier で優先度制御)
- 多言語ランタイムサポート:Python / Node.js / Java / Go などのコンテナイメージで即実行可能
- Optical Data Center Regions (ODCR): Local Zones・Outposts に Batch 対応(2025 年 7 月以降)
目次
- 概要
- このサービスを選ぶ理由
- AWS Batch が解決する課題
- 主な特徴
- アーキテクチャ
- コアコンポーネント詳細
- コンピューティング環境の選択
- ジョブ定義とキュー
- ジョブ依存関係と DAG
- 配列ジョブ(Array Jobs)
- マルチノード並列ジョブ
- Fair-Share Scheduling
- Spot Instance 統合
- SageMaker Training Job Queuing
- 主要ユースケース
- 設定・操作の具体例
- 他の類似ツール・サービスとの比較
- ベストプラクティス
- トラブルシューティング
- 2025-2026 最新動向
- 学習リソース
- 実装例
- チェックリスト
- まとめ
- 参考文献
概要
AWS Batch は、クラウドで大規模バッチコンピューティングワークロードを効率的に実行するための完全マネージドサービス です。Batch は、ジョブキュー・コンピューティング環境・ジョブ定義の 3 要素を設定するだけで、EC2 インスタンス、Fargate リソース、EKS クラスター、さらには SageMaker Training ジョブをシームレスに管理します。AWS Batch 自体は無料。課金されるのは、起動した EC2・Fargate・EKS のコンピューティングリソースのみです。
このサービスを選ぶ理由
| 課題 | 従来の手動管理 | AWS Batch での解決 |
|---|---|---|
| ジョブスケジューリング | 手動でジョブのキューイング・実行順序を管理 | Batch がキュー・優先度・依存関係を完全管理 |
| インフラ容量確保 | ピーク時の容量を事前予測して確保(無駄) | 自動スケーリング・オンデマンド起動。使った分のみ課金 |
| スポットインスタンス | 手動で中断対応・置換 | Capacity Rebalancing で自動対応・チェックポイント保存機構 |
| マルチノード並列 | MPI クラスタの手動セットアップ | Gang Scheduling で自動配置・ネットワーク管理 |
| 複雑な DAG ワークフロー | Step Functions や Airflow を別途導入 | Job Dependencies(N:1 ファンイン対応) |
| コスト最適化 | スポット・オンデマンド混在の管理複雑 | Mixed Allocation Strategy で自動最適化 |
具体的なユースケース
- 毎日の大規模 ETL パイプライン:数百 GB の CSV を Apache Spark で Parquet に変換
- ゲノム解析:WGS アライメント → バリアント呼び出しの多段並列処理(数千 CPU-hour)
- 機械学習ハイパーパラメータチューニング:GridSearch / Random Search で数百〜数千ジョブ並列実行
- 3D ムービーレンダリング:フレーム単位で数千ジョブ並列処理
- 金融シミュレーション:モンテカルロシミュレーション(リスク計算)を数万ジョブで実行
- 定期的なコンプライアンス監査:CloudTrail ログの分析を毎週夜間実行
- SageMaker ML 訓練ジョブの優先度管理:複数チームのモデル訓練ジョブを公平配分
AWS Batch が解決する課題
- インフラのプロビジョニング複雑性:Batch が EC2・Fargate・EKS を自動管理。ユーザーはジョブ定義に集中
- スケーリング遅延:キュー内のジョブ数に応じて秒単位でコンピューティングリソースを起動
- スポット中断対応:Capacity Rebalancing が中断前のジョブを別インスタンスに移行。チェックポイント保存で再開可能
- 複雑なジョブ依存関係:DAG 形式の N:1 ファンイン(複数ジョブ完了後に 1 つのジョブ実行)を自動化
- マルチテナント・公平スケジューリング:Fair-Share Scheduling で複数チーム・ユーザーのジョブを公平配分
- モニタリング・ロギング統合:CloudWatch Logs、X-Ray、EventBridge と自動連携
- ML 訓練ジョブ管理:SageMaker Training Job Queuing で複数訓練タスクを統合管理
主な特徴
- ✅ 完全マネージドジョブスケジューリング:ユーザーはコンテナイメージ定義に集中
- ✅ マルチコンピューティング環境対応:EC2(オンデマンド・スポット)、Fargate、EKS、EKS on Outposts
- ✅ 自動スケーリング:Batch Compute Environment がキュー内のジョブ数に応じて自動スケール
- ✅ ジョブ依存関係(DAG):複数ジョブの順序・並列実行を JSON で定義
- ✅ 配列ジョブ:1 つのジョブ定義を数千並列で実行(パラメータ変更)
- ✅ マルチノード並列(MNP):複数 EC2 インスタンスで MPI ジョブを gang scheduling
- ✅ Fair-Share Scheduling:Share Identifier で複数チームのジョブ公平配分
- ✅ Spot Capacity Rebalancing:スポット中断を自動検知・置換
- ✅ リトライ戦略:自動リトライ、条件付きリトライ(特定終了コードのみ)
- ✅ CloudWatch / X-Ray / EventBridge 統合:エンタープライズグレードの可視化
- ✅ SageMaker Training Job 統合:ML エンジニア向けのキューイング機構
- ✅ Warm Pool(計画中):停止インスタンスを事前準備してコールドスタート回避
アーキテクチャ
graph TB
subgraph Users["Users & Applications"]
Dev["Developer<br/>Job Submission"]
ML["ML Engineer<br/>SageMaker Jobs"]
DSD["Data Scientist<br/>Array Jobs"]
end
subgraph BatchControl["AWS Batch Control Plane"]
JobSub["Job Submission<br/>(AWS CLI / SDK / Console)"]
Scheduler["Batch Scheduler<br/>Priority + Fair-Share"]
Monitor["Monitoring & Logging<br/>(CloudWatch / X-Ray)"]
end
subgraph JobQueue["Job Queue (Priority-based)"]
Q1["Queue Priority 100<br/>(High-Priority Jobs)"]
Q2["Queue Priority 50<br/>(Standard Jobs)"]
Q3["Queue Priority 1<br/>(Low-Priority)"]
end
subgraph ComputeEnv["Compute Environments"]
EC2On["EC2 On-Demand<br/>(Persistent jobs)"]
EC2Spot["EC2 Spot<br/>(Batch processing)"]
Fargate["Fargate<br/>(Serverless)"]
EKS["EKS<br/>(Kubernetes)"]
end
subgraph JobTypes["Job Execution Types"]
Single["Single Container<br/>Job"]
Array["Array Job<br/>N parallel"]
MNP["Multi-Node Parallel<br/>MPI jobs"]
DAG["DAG Workflow<br/>Dependent Jobs"]
end
subgraph Integration["Integration Layer"]
ECR["Amazon ECR<br/>(Container Images)"]
SM["SageMaker<br/>(ML Training)"]
SF["Step Functions<br/>(Orchestration)"]
EV["EventBridge<br/>(Events)"]
end
Users --> JobSub
JobSub --> Scheduler
Scheduler --> JobQueue
JobQueue --> ComputeEnv
ComputeEnv --> JobTypes
JobTypes --> Integration
Scheduler --> Monitor
EC2Spot -.Capacity Rebalancing.-> EC2On
style Users fill:#e1f5fe
style BatchControl fill:#f3e5f5
style ComputeEnv fill:#e8f5e9
style Integration fill:#fff3e0
コアコンポーネント詳細
1. Compute Environment(コンピューティング環境)
EC2・Fargate・EKS リソースを管理するプール。3 種類の管理タイプがあります。
| タイプ | 説明 | 用途 |
|---|---|---|
| MANAGED | Batch が自動でリソース起動・削除を管理 | 推奨。ほぼすべてのケース |
| UNMANAGED | ユーザーが EC2 インスタンスを手動管理 | レガシーシステム統合。非推奨 |
| SPOT_FLEET | スポットインスタンスで最大コスト削減(75-90%) | 中断許容ジョブ |
MANAGED Compute Environment の詳細設定
aws batch create-compute-environment \
--compute-environment-name batch-prod-env \
--type MANAGED \
--state ENABLED \
--compute-resources '{
"type": "SPOT", # EC2 / SPOT / FARGATE / FARGATE_SPOT
"allocationStrategy": "SPOT_CAPACITY_OPTIMIZED",
"minvCpus": 0,
"maxvCpus": 512,
"desiredvCpus": 0,
"instanceTypes": ["optimal"], # m6i / c6i / r6i など
"subnets": ["subnet-1a", "subnet-1c"],
"securityGroupIds": ["sg-batch"],
"instanceRole": "arn:aws:iam::123456789012:instance-profile/ecsInstanceRole",
"spotIamFleetRole": "arn:aws:iam::123456789012:role/AmazonEC2SpotFleetRole",
"bidPercentage": 60,
"spotIamFleetRole": "arn:aws:iam::123456789012:role/AmazonEC2SpotFleetRole",
"tags": {
"Environment": "production",
"CostCenter": "engineering"
}
}' \
--service-role arn:aws:iam::123456789012:role/AWSBatchServiceRole
2. Job Queue(ジョブキュー)
ジョブを受け付けるキュー。1 つ以上の Compute Environment にマップされます。
| 属性 | 説明 |
|---|---|
| Priority | キュー間の優先度(1-1000)。高いほど優先 |
| Compute Environment Order | 複数の Compute Environment をリスト。上から順に割り当て試行 |
| ENABLED / DISABLED | キューの有効・無効切り替え |
| Scheduling Priority | Fair-Share Scheduling の Share Identifier による優先度 |
3. Job Definition(ジョブ定義)
コンテナ実行の仕様書。以下の要素を定義:
- Container Image:ECR イメージ URI
- vCPU / Memory:リソース要件
- IAM Role:ジョブがアクセスする AWS リソース権限
- Environment Variables:設定値
- Secrets:Secrets Manager・Systems Manager Parameter Store からの機密情報
- Retry Strategy:リトライ回数・条件(特定終了コードのみなど)
- Log Configuration:CloudWatch Logs グループ・ストリーム
- Timeout:ジョブ最大実行時間(秒)
- Mount Points:EBS・EFS マウント設定(Fargate では限定的)
- GPU:GPU インスタンス(p3 / p4d)での GPU リソース指定
4. Job(ジョブ)
Batch に投入する実行単位。Job Definition に基づいて起動されます。
| ジョブ状態 | 説明 |
|---|---|
| SUBMITTED | キューに投入直後 |
| PENDING | Compute Environment のリソース割り当て待ち |
| RUNNABLE | リソース確保済み。起動待ち |
| STARTING | コンテナ起動中 |
| RUNNING | 実行中 |
| SUCCEEDED | 正常完了(終了コード 0) |
| FAILED | 失敗(終了コード 0 以外) |
| RUNNABLE → RUNNING:通常 10-30 秒(Spot は +60-120 秒) |
コンピューティング環境の選択
EC2(オンデマンド・スポット混在)
# 混合インスタンスポリシー(推奨:コスト最適化 + 可用性)
aws batch create-compute-environment \
--compute-environment-name batch-ec2-mixed \
--type MANAGED \
--compute-resources '{
"type": "SPOT",
"allocationStrategy": "SPOT_CAPACITY_OPTIMIZED", # スポット中断リスク最小化
"minvCpus": 0,
"maxvCpus": 256,
"desiredvCpus": 0,
"instanceTypes": ["m6i.large", "m6i.xlarge", "m5.large", "m5.xlarge"],
"bidPercentage": 70, # スポット価格が On-Demand の 70% 以上なら EC2 On-Demand に切り替え
"spotIamFleetRole": "arn:aws:iam::123456789012:role/AmazonEC2SpotFleetRole"
}'
Fargate(サーバーレス、シンプル)
# Fargate 環境(GPU 非対応。最大 30GB メモリ)
aws batch create-compute-environment \
--compute-environment-name batch-fargate \
--type MANAGED \
--compute-resources '{
"type": "FARGATE",
"maxvCpus": 256,
"subnets": ["subnet-1a", "subnet-1c"],
"securityGroupIds": ["sg-fargate"]
}'
EKS(Kubernetes ネイティブ)
# EKS クラスター上での Batch(自動スケーリング対応)
aws batch create-compute-environment \
--compute-environment-name batch-eks \
--type MANAGED \
--compute-resources '{
"type": "EC2",
"eks_configuration": {
"eksClusterArn": "arn:aws:eks:ap-northeast-1:123456789012:cluster/my-cluster",
"kubernetesNamespace": "batch-namespace"
}
}'
ジョブ定義とキュー
ジョブ定義の登録(Fargate)
aws batch register-job-definition \
--job-definition-name data-etl-job \
--type container \
--platform-capabilities FARGATE \
--container-properties '{
"image": "123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/data-etl:v1.0",
"resourceRequirements": [
{"type": "VCPU", "value": "2"},
{"type": "MEMORY", "value": "4096"}
],
"jobRoleArn": "arn:aws:iam::123456789012:role/BatchJobRole",
"executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole",
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/aws/batch/jobs",
"awslogs-region": "ap-northeast-1",
"awslogs-stream-prefix": "etl"
}
},
"environment": [
{"name": "ENVIRONMENT", "value": "production"},
{"name": "S3_BUCKET", "value": "my-data-bucket"}
],
"secrets": [
{
"name": "DB_PASSWORD",
"valueFrom": "arn:aws:secretsmanager:ap-northeast-1:123456789012:secret:db-password"
}
],
"fargatePlatformConfiguration": {
"platformVersion": "LATEST"
}
}' \
--retry-strategy '{
"attempts": 3,
"evaluateOnExit": [
{
"onReason": "OutOfMemory",
"action": "EXIT"
},
{
"onExitCode": "1",
"action": "RETRY"
}
]
}' \
--timeout 3600 # 最大 1 時間で timeout
ジョブキューの作成
# ジョブキューの作成(優先度付き)
aws batch create-job-queue \
--job-queue-name high-priority-queue \
--priority 100 \
--compute-environment-order '[
{"order": 1, "computeEnvironment": "batch-ec2-mixed"}
]'
# ジョブの投入
aws batch submit-job \
--job-name etl-run-20260101 \
--job-queue high-priority-queue \
--job-definition data-etl-job \
--container-overrides '{
"environment": [
{"name": "BATCH_DATE", "value": "2026-01-01"},
{"name": "MODE", "value": "incremental"}
],
"resourceRequirements": [
{"type": "VCPU", "value": "4"},
{"type": "MEMORY", "value": "8192"}
]
}'
# ジョブ状態確認
aws batch describe-jobs --jobs job-0123456789abcdef0
ジョブ依存関係と DAG
依存関係の定義(JSON)
# ジョブ A, B, C が完了後に ジョブ D を実行
aws batch submit-job \
--job-name job-d \
--job-queue my-queue \
--job-definition my-job-def \
--depends-on '[
{"jobId": "job-a-id"},
{"jobId": "job-b-id"},
{"jobId": "job-c-id"}
]'
# 依存関係確認
aws batch describe-jobs --jobs job-d-id
Step Functions での DAG オーケストレーション
{
"Comment": "Batch ETL Pipeline DAG",
"StartAt": "ExtractData",
"States": {
"ExtractData": {
"Type": "Task",
"Resource": "arn:aws:states:::batch:submitJob.sync",
"Parameters": {
"JobName": "extract",
"JobDefinition": "extract-job-def",
"JobQueue": "my-queue"
},
"Next": "TransformData",
"Catch": [{"ErrorEquals": ["States.ALL"], "Next": "HandleError"}]
},
"TransformData": {
"Type": "Task",
"Resource": "arn:aws:states:::batch:submitJob.sync",
"Parameters": {
"JobName": "transform",
"JobDefinition": "transform-job-def",
"JobQueue": "my-queue"
},
"Next": "ParallelLoad"
},
"ParallelLoad": {
"Type": "Parallel",
"Branches": [
{
"StartAt": "LoadDB",
"States": {
"LoadDB": {
"Type": "Task",
"Resource": "arn:aws:states:::batch:submitJob.sync",
"Parameters": {
"JobName": "load-db",
"JobDefinition": "load-db-job-def",
"JobQueue": "my-queue"
},
"End": true
}
}
},
{
"StartAt": "LoadCache",
"States": {
"LoadCache": {
"Type": "Task",
"Resource": "arn:aws:states:::batch:submitJob.sync",
"Parameters": {
"JobName": "load-cache",
"JobDefinition": "load-cache-job-def",
"JobQueue": "my-queue"
},
"End": true
}
}
}
],
"Next": "Success"
},
"Success": {
"Type": "Succeed"
},
"HandleError": {
"Type": "Task",
"Resource": "arn:aws:lambda:ap-northeast-1:123456789012:function:notify-error",
"End": true
}
}
}
配列ジョブ(Array Jobs)
1 つのジョブ定義を複数パラメータで並列実行。
# 配列ジョブの投入(0-999 で 1000 並列)
aws batch submit-job \
--job-name image-processing-array \
--job-queue my-queue \
--job-definition image-processor-job \
--array-properties '{
"size": 1000 # 0-999 の 1000 並列実行
}' \
--container-overrides '{
"environment": [
{"name": "ARRAY_INDEX", "value": "AWS_BATCH_ARRAY_INDEX"}
]
}'
# コンテナ内での使用(例:Python)
import os
array_index = os.getenv('AWS_BATCH_ARRAY_INDEX')
image_id = f"image-{array_index:05d}.jpg"
# 該当イメージを処理
配列ジョブの最大並列数:10,000 個
マルチノード並列ジョブ
複数 EC2 インスタンスにまたがる MPI(Message Passing Interface)ジョブ。
# マルチノード並列ジョブ定義の登録
aws batch register-job-definition \
--job-definition-name mpi-simulation-job \
--type container \
--container-properties '{
"image": "123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/mpi-app:latest",
"resourceRequirements": [
{"type": "VCPU", "value": "8"},
{"type": "MEMORY", "value": "16384"}
],
"jobRoleArn": "arn:aws:iam::123456789012:role/BatchJobRole"
}' \
--node-properties '{
"mainNode": 0,
"numNodes": 4, # 4 ノード(マスター 1 + ワーカー 3)
"nodeRangeProperties": [
{
"targetNodes": "0:",
"container": {
"image": "123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/mpi-app:latest",
"resourceRequirements": [
{"type": "VCPU", "value": "8"},
{"type": "MEMORY", "value": "16384"}
]
}
}
]
}'
# マルチノード並列ジョブの投入
aws batch submit-job \
--job-name mpi-job-20260101 \
--job-queue my-queue \
--job-definition mpi-simulation-job \
--node-overrides '{
"numNodes": 8 # ランタイムで 8 ノードに変更
}'
注意:
- EC2 コンピューティング環境のみ対応(Fargate・EKS は非対応)
- Spot インスタンス非対応(オンデマンドのみ)
- 複数 AZ にまたがる配置はサポートされない(同一 AZ 内)
Fair-Share Scheduling
複数チーム・ユーザーのジョブを公平に配分するスケジューリング方式。
# スケジューリングポリシーの作成
aws batch create-scheduling-policy \
--policy-name team-fair-share \
--fair-share-policy '{
"shareDecaySeconds": 3600, # 1 時間の減衰時間
"computeReservation": 80, # 各チームが最大 80% リソース使用可
"shareDistribution": [
{
"shareIdentifier": "team-a",
"weightFactor": 1.0
},
{
"shareIdentifier": "team-b",
"weightFactor": 2.0 # team-b が team-a の 2 倍リソース取得
},
{
"shareIdentifier": "team-c",
"weightFactor": 0.5 # team-c が team-a の 1/2 リソース
}
]
}'
# ジョブ投入時に Share Identifier を指定
aws batch submit-job \
--job-name team-a-analysis \
--job-queue fair-share-queue \
--job-definition analytics-job \
--scheduling-priority-override 50 \
--share-identifier team-a
Spot Instance 統合
Spot Capacity Rebalancing
スポットインスタンスの中断警告を自動検知し、置換インスタンスを事前起動。
# スポット対応のコンピューティング環境
aws batch create-compute-environment \
--compute-environment-name batch-spot-rebalance \
--type MANAGED \
--compute-resources '{
"type": "SPOT",
"allocationStrategy": "SPOT_CAPACITY_OPTIMIZED",
"bidPercentage": 60,
"spotIamFleetRole": "arn:aws:iam::123456789012:role/AmazonEC2SpotFleetRole",
"tags": {
"SpotRebalanceEnabled": "true"
}
}'
# ジョブ定義でチェックポイント機構を実装
aws batch register-job-definition \
--job-definition-name checkpoint-job \
--type container \
--container-properties '{
"image": "my-app:checkpoint",
"environment": [
{"name": "CHECKPOINT_DIR", "value": "/mnt/checkpoint"}
]
}'
Spot 中断対策:
- SIGTERM シグナルハンドリング(2 分前に通知)
- 定期チェックポイント(30 秒ごと)
- メタデータサービスの
spot/instance-actionエンドポイント監視
SageMaker Training Job Queuing
AWS Batch で SageMaker Training ジョブを優先度付きで管理。
# Batch コンピューティング環境で SageMaker Training をサポート
aws batch create-compute-environment \
--compute-environment-name batch-sagemaker \
--type MANAGED \
--compute-resources '{
"type": "EC2",
"minvCpus": 0,
"maxvCpus": 512,
"instanceTypes": ["p3.8xlarge", "p4d.24xlarge"]
}' \
--service-role arn:aws:iam::123456789012:role/AWSBatchServiceRole
# SageMaker Training Job を Batch 経由で投入
aws sagemaker create-training-job \
--training-job-name ml-training-20260101 \
--role-arn arn:aws:iam::123456789012:role/SageMakerRole \
--algorithm-specification '{
"TrainingImage": "382416733822.dkr.ecr.ap-northeast-1.amazonaws.com/xgboost:latest",
"TrainingInputMode": "File"
}' \
--input-data-config '[
{
"ChannelName": "training",
"DataSource": {
"S3DataSource": {
"S3Uri": "s3://my-bucket/training-data",
"S3DataType": "S3Prefix",
"S3DataDistributionType": "FullyReplicated"
}
}
}
]' \
--output-data-config '{
"S3OutputPath": "s3://my-bucket/output"
}' \
--resource-config '{
"InstanceType": "ml.p3.8xlarge",
"InstanceCount": 1,
"VolumeSizeInGB": 50
}' \
--stopping-condition '{"MaxRuntimeInSeconds": 86400}'
主要ユースケース(12 個以上)
1. 日次 ETL パイプライン
# 毎日 2:00 AM に大規模データ変換
aws events put-rule \
--name daily-etl \
--schedule-expression "cron(0 2 * * ? *)"
aws events put-targets \
--rule daily-etl \
--targets "Id"="1","Arn"="arn:aws:batch:ap-northeast-1:123456789012:job-queue/etl-queue","RoleArn"="arn:aws:iam::123456789012:role/EventBridgeRole"
2. ゲノム解析パイプライン(多段並列)
- Step 1: FASTQ ファイルをアライメント(BWA-MEM)→ BAM 生成
- Step 2: バリアント呼び出し(HaplotypeCaller)→ VCF 生成
- Step 3: アノテーション(VEP)
- Job Dependencies で順序管理
3. 機械学習ハイパーパラメータチューニング
- 配列ジョブで数百の異なるハイパーパラメータで SageMaker Training 実行
- 結果を S3 に保存
- 最高精度モデルを自動選択
4. 3D ムービーレンダリング
- フレーム単位で数千ジョブ並列化
- 配列ジョブで AWS_BATCH_ARRAY_INDEX をフレーム番号に割り当て
5. 定期ログ分析(CloudTrail / VPC Flow Logs)
- AWS Lambda + EventBridge Scheduler で毎日実行
- CloudWatch Logs に検索結果を集約
6. コンプライアンス監査
- 週間監査ジョブ:全 EC2・IAM・S3 リソースのスキャン
- Security Hub と連携
7. 金融シミュレーション(モンテカルロ)
- オプション価格計算・リスク評価
- 数万並列で数百万シミュレーション実行
8. ビッグデータ分析(Apache Spark)
- EMR Serverless ジョブを Batch キューイング経由で実行
- Spark クラスターのセットアップ自動化
9. マルチテナント優先度管理
- Fair-Share Scheduling で複数顧客のジョブを公平配分
- 各顧客の Share Identifier で SLA 管理
10. バッチ推論(モデル予測)
- 大規模な新規データセット(TB 級)に対して訓練モデルで予測実行
- 配列ジョブで小分け
11. バックアップ・データベース操作
- 定期データベースバックアップ
- 大規模テーブルの再インデックス
12. 開発環境のテスト・ビルド
- コード変更時に CI/CD から Batch ジョブ投入
- マルチリージョンテスト並列実行
設定・操作の具体例
CLI での基本的なジョブ投入フロー
# 1. ジョブ定義の確認
aws batch describe-job-definitions \
--job-definition-name my-job-def \
--status ACTIVE
# 2. ジョブキューの確認
aws batch describe-job-queues \
--query 'jobQueues[*].{Name:jobQueueName,Status:state,Priority:priority}'
# 3. ジョブ投入
aws batch submit-job \
--job-name my-job-20260101 \
--job-queue my-queue \
--job-definition my-job-def
# 4. ジョブ状態監視
aws batch list-jobs \
--job-queue my-queue \
--job-status RUNNING
# 5. 詳細ログ確認
aws logs tail /aws/batch/jobs --follow
Python SDK での配列ジョブ投入
import boto3
batch = boto3.client('batch', region_name='ap-northeast-1')
response = batch.submit_job(
jobName='image-processing-array',
jobQueue='my-queue',
jobDefinition='image-processor-job',
arrayProperties={
'size': 1000 # 1000 並列
},
containerOverrides={
'environment': [
{
'name': 'IMAGE_ID',
'value': 'AWS_BATCH_ARRAY_INDEX'
}
]
}
)
job_id = response['jobId']
print(f"Submitted job {job_id}")
# ジョブ完了待機
waiter = batch.get_waiter('job_completed')
waiter.wait(jobs=[job_id])
CloudFormation での Batch 環境構築
AWSTemplateFormatVersion: '2010-09-09'
Resources:
BatchServiceRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: batch.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSBatchServiceRole
ComputeEnvironment:
Type: AWS::Batch::ComputeEnvironment
Properties:
ComputeEnvironmentName: batch-prod
Type: MANAGED
State: ENABLED
ComputeResources:
Type: SPOT
AllocationStrategy: SPOT_CAPACITY_OPTIMIZED
MinvCpus: 0
MaxvCpus: 512
InstanceTypes:
- m6i.large
- m6i.xlarge
Subnets:
- subnet-xxxxx
SecurityGroupIds:
- sg-xxxxx
InstanceRole: arn:aws:iam::123456789012:instance-profile/ecsInstanceRole
BidPercentage: 60
ServiceRole: !GetAtt BatchServiceRole.Arn
JobQueue:
Type: AWS::Batch::JobQueue
Properties:
JobQueueName: prod-queue
Priority: 100
ComputeEnvironmentOrder:
- Order: 1
ComputeEnvironment: !Ref ComputeEnvironment
JobDefinition:
Type: AWS::Batch::JobDefinition
Properties:
JobDefinitionName: data-etl-job
Type: container
PlatformCapabilities:
- FARGATE
ContainerProperties:
Image: 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/data-etl:latest
ResourceRequirements:
- Type: VCPU
Value: '2'
- Type: MEMORY
Value: '4096'
JobRoleArn: arn:aws:iam::123456789012:role/BatchJobRole
他の類似ツール・サービスとの比較
| 観点 | AWS Batch | AWS Lambda | ECS + EC2 | Kubernetes (EKS) | Apache Airflow | Apache Oozie |
|---|---|---|---|---|---|---|
| 管理負荷 | 非常に低(ジョブキュー管理のみ) | 極めて低(サーバーレス) | 中程度(ECS クラスター管理) | 高(K8s ノード管理) | 中程度 | 中程度 |
| 最大実行時間 | 無制限(24h以上対応) | 15 分(制限) | 無制限 | 無制限 | 無制限 | 無制限 |
| 最大メモリ | 3.8TB(x2 インスタンス) | 10.24GB | インスタンスに依存 | インスタンスに依存 | インスタンスに依存 | インスタンスに依存 |
| GPU サポート | ✅(p3 / p4d) | ❌ | ✅ | ✅ | ✅ | ✅ |
| マルチノード並列 | ✅(MPI / gang scheduling) | ❌ | ✅(ただし手動管理) | ✅ | ❌ | ❌ |
| スケジューリング | ✅(Job Queue + Fair-Share) | ✅(同時実行数制限) | ❌(別途ツール必要) | ✅ | ✅ | ✅ |
| コスト効率 | ★★★★★(Spot + Auto Scaling) | ★★★★☆(オンデマンド) | ★★★★☆ | ★★★☆☆ | ★★★☆☆ | ★★☆☆☆ |
| 使用シーン | 大規模バッチ処理、科学計算、HPC | 軽量定期タスク、イベント駆動 | コンテナアプリ恒続実行 | マイクロサービス、複雑オーケストレーション | ワークフロー定義、DAG スケジューリング | Hadoop 生態系 |
Slurm(オンプレミス HPC)との比較
| 観点 | AWS Batch | Slurm |
|---|---|---|
| 初期投資 | 0(クラウド課金) | 数百万円(ハードウェア+ライセンス) |
| スケーラビリティ | ∞(AWS リージョン制限のみ) | サイト内スケール限定 |
| グローバル展開 | ✅(マルチリージョン容易) | ❌(困難) |
| 管理負荷 | 低(AWS がインフラ管理) | 高(オンプレミス管理) |
| ジョブスケジューリング | 同程度 | Batch より高機能 |
ベストプラクティス
✅ DO(すべきこと)
-
Fargate をデフォルトに(GPU・大メモリ不要な限り)
- サーバーレス。管理不要
- 起動時間 30-60 秒(EC2 より短)
-
Spot を積極活用(中断許容ジョブ)
- コスト削減率:75-90%
- Capacity Rebalancing で自動置換
-
コンテナイメージを軽量に(< 500MB)
- ECR ダウンロード時間削減
- デプロイ高速化
-
リトライ戦略を細かく設定
- 一時的障害は自動リトライ
- リソース不足など非一時的なら EXIT
-
CloudWatch / X-Ray 統合
- ジョブパフォーマンス可視化
- ボトルネック特定
-
Fair-Share Scheduling を活用(マルチテナント環境)
- チーム間の公平配分
- SLA ベースのスケール
-
セキュリティ
- IAM Role(ジョブごと最小権限)
- Secrets Manager で機密情報管理
- VPC エンドポイント活用
❌ DON’T(してはいけないこと)
-
maxvCpus 未設定
- コスト爆発リスク
- 必ず上限を設定
-
環境変数に機密情報を直接設定
- CloudWatch Logs に露出
- Secrets Manager / Parameter Store 使用
-
マルチノード並列に Spot 使用
- 1 つのノード中断で全体失敗
- オンデマンド必須
-
GPU ジョブを Fargate で実行
- Fargate は GPU 非対応
- EC2 コンピューティング環境使用
-
ジョブログをアプリケーション管理
- CloudWatch Logs を標準
- ローカルストレージは容量制限あり
-
バージョニングなしイメージ使用
latestタグは危険- 必ずセマンティックバージョニング
トラブルシューティング
| 現象 | 原因 | 解決 |
|---|---|---|
| ジョブが PENDING のまま | リソース不足・Compute Environment が DISABLED | maxvCpus を増やす / list-jobs で確認 |
| ジョブが FAILED(OutOfMemory) | メモリ不足 | Job Definition の memory を増やす |
| ジョブ完了に 5+ 分かかる | EC2 起動遅延(Spot キャパシティ待機) | Fargate に変更 / Warm Pool 使用 |
| 配列ジョブの一部が FAILED | パラメータエラー / AWS_BATCH_ARRAY_INDEX ハンドリング漏れ | コンテナログを CloudWatch で確認 |
| スポット中断で全ジョブ失敗 | チェックポイント機構未実装 | SIGTERM ハンドラー + 定期 CP 実装 |
| IAM 権限エラー | ジョブロールの権限不足 | batch:* + ec2:* + s3:* 等を追加 |
| イメージダウンロード遅延 | ECR レート制限 / イメージサイズ大 | ecr:GetDownloadUrlForLayer 権限確認 / イメージ軽量化 |
| CloudWatch Logs に出力されない | awslogs ドライバー設定漏れ / ロググループ未作成 | Job Definition で logConfiguration 確認 |
2025-2026 最新動向
Spot Capacity Rebalancing 強化
- スポット中断 2 分前の自動検知・置換が主流化
- 2025 年 7 月:Optical Data Center Regions(ODCR)でも Batch 対応開始
SageMaker Training Job Queuing 一般提供
- 2026 年 Q1:複数 ML エンジニアのジョブを統一キューで管理
- Fair-Share Scheduling で優先度制御
Warm Pool(計画中)
- 停止 EC2 インスタンスを事前準備
- コールドスタート時間を秒単位に削減(体験改善)
Multi-architecture Image Support
- ARM64(Graviton)イメージのネイティブサポート(cost 30% 削減)
AWS Outposts / Local Zones での Batch 展開
- 2025 年 7 月以降:オンプレミス環境で Batch ジョブ実行可能
- エッジでのローカル処理 + クラウド連携
学習リソース
公式ドキュメント(AWS 提供)
ベストプラクティス & ブログ
- Instance type allocation strategies for AWS Batch
- Best practices for Amazon EC2 Spot
- Setting up AWS Batch multi-node parallel jobs
- Spot Fleet Auto Scaling Best Practices 2026
オープンソース / サンプルコード
Kubernetes / Karpenter との比較リソース
実装例
例 1:ETL パイプラインの実装
import boto3
from datetime import datetime
batch = boto3.client('batch')
# Step 1: Extract ジョブ投入
extract_response = batch.submit_job(
jobName=f'extract-{datetime.now().isoformat()}',
jobQueue='etl-queue',
jobDefinition='extract-job'
)
extract_job_id = extract_response['jobId']
# Step 2: Transform ジョブ投入(Extract 依存)
transform_response = batch.submit_job(
jobName=f'transform-{datetime.now().isoformat()}',
jobQueue='etl-queue',
jobDefinition='transform-job',
dependsOn=[{'jobId': extract_job_id}]
)
transform_job_id = transform_response['jobId']
# Step 3: Load ジョブ投入(Transform 依存)
load_response = batch.submit_job(
jobName=f'load-{datetime.now().isoformat()}',
jobQueue='etl-queue',
jobDefinition='load-job',
dependsOn=[{'jobId': transform_job_id}]
)
print(f"ETL Pipeline started: {load_response['jobId']}")
例 2:配列ジョブでの並列画像処理
import os
import sys
from PIL import Image
import boto3
s3 = boto3.client('s3')
array_index = int(os.getenv('AWS_BATCH_ARRAY_INDEX', 0))
bucket = os.getenv('S3_BUCKET')
image_id = f'{array_index:05d}'
# S3 からイメージダウンロード
s3.download_file(
Bucket=bucket,
Key=f'raw/{image_id}.jpg',
Filename=f'/tmp/{image_id}.jpg'
)
# イメージ処理(リサイズ・フィルター等)
img = Image.open(f'/tmp/{image_id}.jpg')
img_resized = img.resize((256, 256))
img_resized.save(f'/tmp/{image_id}_processed.jpg')
# 結果を S3 にアップロード
s3.upload_file(
Filename=f'/tmp/{image_id}_processed.jpg',
Bucket=bucket,
Key=f'processed/{image_id}.jpg'
)
print(f'Processed image {image_id}')
コンテナイメージの Dockerfile:
FROM python:3.11-slim
RUN pip install pillow boto3
COPY process.py /app/process.py
ENTRYPOINT ["python", "/app/process.py"]
チェックリスト
- [ ] Fargate vs EC2 vs EKS のどれを使うか決定した
- [ ] コンピューティング環境の maxvCpus を明示的に設定
- [ ] ジョブ定義に IAM Role(最小権限)を指定
- [ ] 機密情報は Secrets Manager / Parameter Store 経由
- [ ] リトライ戦略を evaluateOnExit で細かく制御
- [ ] CloudWatch Logs ロググループを事前作成
- [ ] Spot ジョブは SIGTERM ハンドラーを実装
- [ ] 配列ジョブは AWS_BATCH_ARRAY_INDEX の parse 処理確認
- [ ] マルチノード並列ジョブは EC2 + オンデマンド
- [ ] Fair-Share 環境では Share Identifier を含めて投入
- [ ] イメージサイズを 500MB 以下に最適化
- [ ] CloudFormation / Terraform で Infrastructure as Code 化
- [ ] 本番環境前にステージング環境で動作確認
- [ ] Cost Anomaly Detection で異常な支出を監視
まとめ
AWS Batch は 「エンタープライズグレードのバッチコンピューティング完全マネージドサービス」 です。
主要な使いどころ:
- 大規模データ処理(ETL):数百 GB~ TB
- 科学計算・シミュレーション:GPU / マルチノード対応
- 機械学習:SageMaker Training Job キューイング統合
- ゲノミクス・バイオインフォマティクス:HPC クラス性能
- 金融シミュレーション:モンテカルロ並列化
強み:
- ジョブスケジューリング自動化(IAM で権限管理)
- Spot との統合で極限のコスト最適化(75-90% 削減)
- Fair-Share で複数チーム公平配分
- Step Functions との組み合わせで複雑 DAG 自動化
- SageMaker / EKS との深い統合
注意点:
- maxvCpus 未設定でコスト爆発リスク
- マルチノード並列は EC2 + オンデマンド必須
- イメージ管理・バージョニング重要
参考文献
AWS 公式
ベストプラクティス
関連サービス比較
業界情報
最終更新:2026-04-26 バージョン:v2.0