
【VPC外リージョンサービス / ENIでVPC接続】
Batch は、クラウド上で大規模なデータ処理や計算タスクを効率的に実行できるバッチ処理サービスです。
ジョブ / ジョブ定義 / ジョブキュー / ジョブ依存関係 を明確に分離して管理できるため、複雑な処理フローも柔軟に構築できます。
ジョブは、コンピューティング環境 上で実行され、ECS / Fargate / Docker コンテナ / AMI などを利用して、柔軟に環境を選択できます。
EC2 / Spot / Fargate による実行基盤を自動的にプロビジョニングし、自動スケーリング / 動的リソース割り当て / スポット最適化 によって、需要に応じた最適なリソース管理を実現します。
ジョブの依存関係や再実行制御、優先度や配分ポリシーを設定することで、スループットを最大化し、安定したバッチ処理を行うことができます。
重要用語
動的リソース割り当て
スポット最適化
ユースケース
| 大量バッチ処理の自動スケーリング実行 | 何万件ものデータ処理ジョブをBatchに投入し、必要な数のコンピューティング環境(EC2/Fargate)を自動的に起動して並列実行する。 |
| 時間のかかるサイエンス計算・シミュレーション | 研究開発やシミュレーションなど、長時間かかる計算ジョブをキューに投入し、空いているリソースで順次実行していく。 |
| コスト最適化されたスポットバッチ処理 | 優先度の低いバッチジョブをSpotインスタンスを使うコンピュート環境に割り当て、計算コストを大幅に削減する。 |
ベストプラクティス
| ジョブ定義とキューの分離 | 優先度や実行時間に応じてキューを分ける。 |
| Spotインスタンスの活用 | 中断許容ジョブはSpotを利用してコスト削減する。 |
| コンテナイメージの再利用 | 共通ベースイメージを用いてジョブ起動時間を短縮する。 |
高可用性・バックアップ・リトライ
| 高可用性・バックアップ・リトライ設計のポイント |
|---|
| 【デフォルト】AWS内部で冗長化 ・コントロールプレーン ・ジョブキュー ・Compute Environment(計算環境)の自動フェイルオーバー ・基盤リソース(EC2 / ECS / ECR / S3) ・ロギング・メトリクス |
| 【自動リトライ】ジョブレベルの自動再実行 失敗したジョブ(ExitCode≠0など)を 指定回数まで自動的に再送信・再実行 |
セキュリティ
| 関連サービス | 設定内容 |
|---|---|
| CloudTrail(操作履歴の記録・監査・追跡) | 【自動記録】 作成・更新・削除・設定変更は自動記録される。(コントロールプレーンAPI) データ操作は追跡できない(データプレーンAPI) |
| Config(リソースの構成状態・設定変更を記録) | - |
| GuardDuty(脅威を自動検出) | 【GuardDutyが有効な場合】 ジョブ/キュー操作のAPI異常検知 |
Batchが実行ロールを引き受ける典型的な連携パターン
| 実行ロールを介して連携するサービス | 実行ロールにアタッチするポリシー |
|---|---|
| CloudWatch Logs | logs:CreateLogGroup logs:CreateLogStream logs:PutLogEvents |
| CloudWatch Metrics | cloudwatch:PutMetricData |
| ECR | ecr:GetAuthorizationToken ecr:BatchCheckLayerAvailability ecr:GetDownloadUrlForLayer ecr:BatchGetImage |
| DynamoDB | dynamodb:GetItem dynamodb:PutItem dynamodb:UpdateItem dynamodb:DeleteItem dynamodb:Query dynamodb:Scan |
| S3 | s3:ListBucket s3:GetObject s3:PutObject s3:DeleteObject |
| SQS(送信) | sqs:SendMessage |
| SQS(ポーリング) | sqs:ReceiveMessage sqs:DeleteMessage sqs:GetQueueAttributes sqs:ChangeMessageVisibility |
| SNS | sns:Publish |
| Step Functions | states:SendTaskSuccess states:SendTaskFailure |
| Lambda | lambda:InvokeFunction |
| EventBridge | events:PutEvents |
| Secrets Manager | secretsmanager:GetSecretValue |
| SSM Parameter Store | ssm:GetParameter |
| KMS | kms:Decrypt kms:GenerateDataKey |
信頼ポリシー: Batch(ECS on Fargateタスクとして実行)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ecs-tasks.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
ログ・監視
| ログ出力先 | ログの種類 |
|---|---|
| CloudWatch Logs | ジョブログ |
標準メトリクス
| メトリクス名 | 説明 |
|---|---|
| JobsFailed | 失敗ジョブ数 |
| JobsPending | 待機ジョブ数 |
| JobsRetrying | 再試行中ジョブ数 |
| JobsRunnable | Runnableジョブ数 |
| JobsRunning | 実行中ジョブ数 |
| JobsStarting | ジョブ開始中 |
| JobsSubmitted | Submit済ジョブ数 |
| JobsSucceeded | 成功ジョブ数 |
制限値(固定値/ハードリミット/ソフトリミット)
| 固定値 | 制限値 |
|---|---|
| ジョブの最大実行時間 | 制限なし(スポット例外あり) |
| アレイジョブのサイズ | 10,000 |
| ソフトリミット | 制限値 |
|---|---|
| ジョブキュー数/リージョン | 50 |
| コンピューティング環境数/リージョン | 50 |
| ジョブ定義数/リージョン | 10,000 |
AWS CLIのサンプルコード
CloudFormationのサンプルコード
Terraformのサンプルコード
料金計算
| 課金項目 | 説明 |
|---|---|
| Batch自体は無料 | 使用するEC2/Fargateリソースに課金 |