如何让 AWS Batch 一次处理 运行 超过 2 或 3 个作业?

How can I get AWS Batch to run more than 2 or 3 jobs at a time?

我刚刚开始使用 AWS。我有一个(相当复杂的)Python 脚本,它从 S3 存储桶中读取一些数据,进行一些计算,然后将一些结果导出到同一个 S3 存储桶。我已将所有内容打包到一个 Docker 容器中,我正在尝试使用 AWS Batch 运行 并行(例如,一次 50 个实例)。

我已经使用以下参数设置了计算环境:
类型:托管
配置模型:FARGATE
最大 vCPU:256

然后我使用该计算环境设置了一个作业队列。

接下来,我使用具有以下参数的 Docker 图像设置作业定义:
vCpus:1
内存:6144

最后,我使用稍微不同的命令使用该作业定义提交了一堆作业并将它们发送到我的队列。

当我提交前几个作业时,我看到前 2 个作业的状态从 RUNNABLE 变为 STARTING 再到 运行。然而,其余的只是处于 RUNNABLE 状态,直到前 2 个完成。

有谁知道运行一次处理超过 2 或 3 个作业的瓶颈是什么?我知道存在一些帐户限制,但我不确定哪一个可能是瓶颈。

原来这里有 3 件事在起作用:

  1. 我的账户有 5 个 public IP 地址的服务配额,每个容器都有自己的 IP 地址,因此它可以与 S3 存储桶通信。我将其中一个子网设为私有子网,并将我所有的容器都放在该子网中。然后,我在 public 子网中设置了一个 NAT 网关,并通过该网关路由我的所有流量。 (更多详情请见 https://aws.amazon.com/premiumsupport/knowledge-center/nat-gateway-vpc-private-subnet/

  2. 正如 Marcin 指出的那样,Fargate 的扩展速度确实很慢。我转而使用 EC2,它的扩展速度更快,但在大约 30 个容器实例时仍停止扩展。

  3. 我的账户上有一个名为“EC2 实例/实例限制(所有标准(A、C、D、H、I、M、R、T、Z)实例)”的服务配额设置为 32。我联系了 AWS,他们提高了限制,所以我现在可以 运行 一次处理超过 100 个作业。