Closed2

AWS Batchの調査

YamahitsujiYamahitsuji

https://www.youtube.com/watch?v=-2Kz3d7hPBk

2種類の「バッチ処理」

A 定型業務におけるバッチ処理
夜間バッチなど。ジョブの起動予約や順序を定義して、ジョブを実行するもの。
B 大規模計算におけるバッチ処理
スパコンで行う大規模科学計算、CGレンダリング、機械学習における学習プロセス、ゲノム解析など。
AWS BatchはBの用途。

スパコンは高価で空き時間がもったいない→ジョブをキューイングしてできるだけ効率的にジョブ実行を行おう!このジョブをマネジメントするのがジョブスケジューラ。
オンプレだとリソースが固定。ジョブの待ち時間が長くなったり、無駄が出たりする。また、インフラの管理も必要→クラウドの出番!

クラウドのバッチコンピューティング

ジョブが実行されるときに、必要なコンピューティングリソースを作成。ジョブがない時にはリソースを削除することで、コストが減らせる。

AWS Batch

EC2またはFargate上でDockerコンテナを実行。
バッチ環境をフルマネージドで提供している。(キュー、コンピューティング環境、タイムアウト・リトライの処理)

他のサービスが適している場合

数秒で終わるジョブ→Step Functions+Lambda

アーキテクチャ

batch
https://www.slideshare.net/AmazonWebServicesJapan/20190911-aws-black-belt-online-seminar-aws-
コンピューティング環境はECSが利用される。

ジョブ定義

ジョブを作成するテンプレート。コンテナイメージや実行コマンド、コンピューティングリソースなどのタスク定義。ジョブのリトライやタイムアウトも指定できる。

ジョブ

元となるジョブ定義や投入先ジョブキュー。ジョブ定義を上書くことも可能。シングルジョブor配列ジョブの指定や、ジョブの依存関係等も指定できる。

ジョブキュー

ジョブの待ち行列となる場所。
ジョブキューの優先度を設定できる。コンピューティング環境では複数のジョブキューを指定することができ、優先度の高いジョブキュー内のジョブを先にスケジュールする。

コンピューティング環境

計算を行うECSクラスター。
マネージドorアンマネージド。ジョブの最大最小vCPU数を設定する。最小vCPUを0にすることで、ジョブがない時はインスタンスを起動しないようにできる。
使用できるインスタンスタイプを指定する。

ジョブ状態の遷移

ジョブの投入方法

  • ユーザが手動で投入
  • APIから投入(Lambdaから投入など)
  • EventBridgeから投入

スポットの利用

EC2, Fargate共にスポットインスタンスを使用可能。
Tips

  • キューを分けて、通常ジョブはスポット、優先度の高いジョブはオンデマンドに割り振ることができる
  • 最初はスポットで処理し、失敗した場合はSNSを経由してオンデマンド用のジョブキューに投入する
YamahitsujiYamahitsuji

AWS Batchか、ECS Taskか

両者の違い

どちらもECSクラスター上にコンピューティングリソースを作成して、ジョブを実行する。
ECS Taskは1つのタスク(1つ以上のコンテナ)をクラスター上で即時実行する。終了するとコンピューティングリソースは削除される。
一方AWS Batchは利用者がジョブをキューに積み、AWS Batchが管理する空いているコンピューティングリソースでジョブを実行してくれる。簡単に言えば、ジョブをキューイングしておけば、よしななタイミングで実行しておいてくれるサービスである。コンピューティングリソースはAWS Batchがプールしており、ジョブの量に応じて自動的にスケールしてくれる。コンピューティングリソースの範囲を決めるので、並行できるジョブに制限がかけられる。

使い所

AWS Batchのベストプラクティスに沿うと、「非常に短いジョブ」と「即時に実行する必要のあるジョブ」の場合はLambdaまたはECS Taskを推奨する。
「非常に短いジョブ」については、ジョブの実行時間よりもジョブのスケジューリング時間が長くなる可能性があるからである。そんなに待つなら、ECS Taskでパッと実行してしまったほうがよい。
「即時に実行する必要のあるジョブ」については、AWS Batchが即座にジョブを実行するかわからないからである。他のジョブの実行状況によるため、キューイングしたジョブが即座に実行されるかはわからない。AWS Batchあくまでジョブのキューイングおよび自動実行サービスということを認識しておく。

反対に長時間、並列して実行する可能性がある場合はAWS Batchが良い。FargateはENIを使用するため、並行して長時間のジョブが実行される場合はIPアドレスを消費する。このため、IPアドレスが確保できない場合、ジョブを実行できない。AWS Batchはリソースの上限とジョブキューを持つため、リソースの範囲の中でジョブを順次実行してくれる。Google Meetsの録画機能は、録画した後しばらくしてからストレージに動画が保存されるが、このようにジョブのキューイング&実行を行なっていると思われる。

また、Fargateが使えない場合(CPU,メモリの制限、GPUなど)もAWS Batchの使用を検討できる。Fargateで使用できない場合はEC2を利用する。この際、ECS TaskではEC2のプロビジョニングが必要になるが、AWS Batchではジョブがない場合はEC2インスタンスを0にできる。

大雑把に、実行時間が短いもしくは実行頻度が多くない場合はECS Task、実行時間が長く実行回数も多い場合はAWS Batchが良さそう。

このスクラップは2022/10/03にクローズされました