📛

AWS Batch で並列処理

2024/01/21に公開

AWS Batch とは

AWS 上でバッチ処理を行うためのサービスです。
AWS Batch 以前、バッチ処理を実現するには EC2, ECS タスクなどのコンピューティングリソースを用意する必要がありました。
AWS Batch はそのあたりを抽象化して管理しやすく、ソースコードの実装やバッチの結果に集中することができます。

AWS Batch 上の 3 つの概念

AWS Batch には 3 つの構成要素があり、以下で簡単に紹介します。

ジョブ、(ジョブ定義)

AWS Batch 上で実際に実行される処理の単位をジョブと言います。
ジョブの結果は実行ごとにコンソール上でステータスやログを参照することができます。
ジョブ定義ではジョブ中に使用する Docker イメージや CPU, メモリ要件、IAM ロール、環境変数などを指定する必要があります。

コンピューティング環境

ジョブが実際に実行されるコンピューティングリソースのことを指します。
コンピューティングリソースには EC2 or Fargate を選ぶことができ、料金体系もそれらに依存します。
ジョブが送信されたらジョブ定義に沿ってコンピューティングリソースを用意します。

ジョブキュー

ジョブが送信されてからコンピューティング環境にスケジュールされるまでこのキューに存在します。

並列化を考える上で大切なこと

AWS Batch ではジョブを並列に実行することができます。
直接指定する場所がないのでちょっと悩みますが、ポイントとなってくるのが ジョブ定義でしてした vCPU 数コンピューティング環境で指定する最大 vCPU です。
結論、並列数は「コンピューティング環境最大 vCPU / ジョブ定義の CPU」となります。
例えばコンピューティング環境で vCPU = 96 と設定し 1 つのジョブに必要な vCPU 数を 4 とした場合、24 並列(96 / 4)が最大となります。

そのため AWS Batch で並列処理を考える際はジョブ定義で必要な vCPU 数を見積もり、並列処理したい数に合わせてコンピューティング環境を用意する必要があります。

Discussion