AWS Batch on AWS Fargate でも同時実行数を制限できる
Posted on
- #aws
AWS Batch on AWS Fargate を使えば、EC2 インスタンスを意識することなくバッチ処理を行うことができます。 Fargate のおかげでコンピューティングリソースを簡単にスケールアウトさせることができる一方、データベースアクセスを伴うようなバッチ処理ではそちらがボトルネックになることがあるため同時実行数を制限したい場合があります。
AWS Batch の Compute environment に指定できる maxvCpus のパラメータで制限できそうですが、"Compute environment parameters" には次のように書いてあり EC2 の場合しか使えないように読み取れます。
The maximum number of Amazon EC2 vCPUs that an environment can reach.
ですが、実際には maxvCpus を 16 に設定した Compute environment に 2 vCPU を要求する Job definition で数百の Job を処理させると、同時実行数が 8 (16 / 2) を超えることはなく制限できていることに気づきました。 Container Insights の TaskCount メトリクスからも見て取れます。

改めて AWS Batch on AWS Fargate の "Compute environments on Fargate" のセクションを読んでみると、次のパラメータは適用できないと書いてあります。
allocationStrategybidPercentagedesiredvCpusimageIdinstanceTypesec2Configurationec2KeyPairinstanceRolelaunchTemplateminvCpusplacementGroupspotIamFleetRole
この中に maxvCpus が存在しないことから AWS Batch on AWS Fargate でも使えるということのようです(ソリューションアーキテクトの方にも確認しました)。
ドキュメントの表記はミスリーディングですが、ひとまず AWS Batch on AWS Fargate でも同時実行数を制限できることがハッキリしたので良かったです。