AWS Batch で並列処理
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