Batch

【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 Logslogs:CreateLogGroup
logs:CreateLogStream
logs:PutLogEvents
CloudWatch Metricscloudwatch:PutMetricData
ECRecr:GetAuthorizationToken
ecr:BatchCheckLayerAvailability
ecr:GetDownloadUrlForLayer
ecr:BatchGetImage
DynamoDBdynamodb:GetItem
dynamodb:PutItem
dynamodb:UpdateItem
dynamodb:DeleteItem
dynamodb:Query
dynamodb:Scan
S3s3:ListBucket
s3:GetObject
s3:PutObject
s3:DeleteObject
SQS(送信)sqs:SendMessage
SQS(ポーリング)sqs:ReceiveMessage
sqs:DeleteMessage
sqs:GetQueueAttributes
sqs:ChangeMessageVisibility
SNSsns:Publish
Step Functionsstates:SendTaskSuccess
states:SendTaskFailure
Lambdalambda:InvokeFunction
EventBridgeevents:PutEvents
Secrets Managersecretsmanager:GetSecretValue
SSM Parameter Storessm:GetParameter
KMSkms: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ジョブログ
CloudWatch Logs優先の原則
標準メトリクス
メトリクス名説明
JobsFailed失敗ジョブ数
JobsPending待機ジョブ数
JobsRetrying再試行中ジョブ数
JobsRunnableRunnableジョブ数
JobsRunning実行中ジョブ数
JobsStartingジョブ開始中
JobsSubmittedSubmit済ジョブ数
JobsSucceeded成功ジョブ数

制限値(固定値/ハードリミット/ソフトリミット)

固定値制限値
ジョブの最大実行時間制限なし(スポット例外あり)
アレイジョブのサイズ10,000

ソフトリミット制限値
ジョブキュー数/リージョン50
コンピューティング環境数/リージョン50
ジョブ定義数/リージョン10,000

AWS CLIのサンプルコード

CloudFormationのサンプルコード

Terraformのサンプルコード

料金計算

課金項目説明
Batch自体は無料使用するEC2/Fargateリソースに課金

公式ページ

AWSドキュメント Batch