如何使用 AWS Batch?

如何使用 AWS Batch?

我正在尝试使用新的 AWS Batch 功能:https://aws.amazon.com/batch/

我甚至无法运行最简单的批处理作业(使用演示“echo hello world”)。该作业一直停留在可运行状态。

为了尝试隔离问题,我在全新的 AWS 账户上使用所有默认设置。

我的理解是,我不必手动启动任何 EC2 实例来使用此功能,AWS Batch 应该会为我完成此操作。但它似乎在等待可用的 EC2 实例来运行该作业。它不应该只是启动一个 EC2 实例来自行运行该作业吗?

提前致谢。

答案1

我注意到,当我指定一个 8000 MiB 的作业定义时,启动的实例只有 7986MB,而我的作业将卡在可运行状态。

8000 MiB 等于 8388.608MB,因此看起来正在启动的实例没有足够的内存来运行该作业,因此它挂起了。

如果我创建一个具有 7000 MiB 的作业定义,那么我的作业将不再卡在可运行状态,因为它仍然使用具有 7986MB 内存的相同实例。

答案2

Batch 文档中有一个故障排除指南,用于解决“作业卡在可运行状态”的问题。 https://docs.aws.amazon.com/batch/latest/userguide/troubleshooting.html#job_stuck_in_runnable

如果您的计算环境包含计算资源,但您的作业没有超出 RUNNABLE 状态,则存在一些因素阻止作业实际放置在计算资源上。以下是导致此问题的一些常见原因:

您的计算资源上未配置 awslogs 日志驱动程序

AWS Batch 作业将其日志信息发送到 CloudWatch Logs。要启用此功能,您必须将计算资源配置为使用 awslogs 日志驱动程序。如果您的计算资源 AMI 基于 Amazon ECS 优化 AMI(或 Amazon Linux),则默认情况下此驱动程序会使用 ecs-init 包进行注册。如果您使用不同的基本 AMI,则必须确保在启动 Amazon ECS 容器代理时使用 ECS_AVAILABLE_LOGGING_DRIVERS 环境变量将 awslogs 日志驱动程序指定为可用日志驱动程序。有关更多信息,请参阅计算资源 AMI 规范和创建计算资源 AMI。

资源不足

如果您的作业定义指定的 CPU 或内存资源多于您的计算资源可以分配的资源,那么您的作业将永远不会被放置。例如,如果您的作业指定 4 GiB 内存,而您的计算资源少于该内存,则无法将作业放置在这些计算资源上。在这种情况下,您必须减少作业定义中指定的内存或向您的环境添加更大的计算资源。

已达到 Amazon EC2 实例限制

您的账户可以在 AWS 区域启动的 Amazon EC2 实例数量由您的 EC2 实例限制决定。某些实例类型也具有每个实例类型的限制。有关您账户的 Amazon EC2 实例限制的更多信息(包括如何请求增加限制),请参阅 Amazon EC2 用户指南(适用于 Linux 实例)中的 Amazon EC2 服务限制

我发现导致此问题的其他常见问题是:

  1. 没有互联网路由
  2. 作业定义中的 CPU/内存高于实例
  3. 实例未注册到 ECS 集群
  4. 代理已断开连接 -https://aws.amazon.com/premiumsupport/knowledge-center/ecs-agent-disconnected/

您可以采取的其他故障排除步骤:

  1. 在集群中手动启动相关的 ECS 任务定义
  2. SSH 并从容器实例内部尝试 docker run
  3. 从容器实例内部 Curl ECS 和 Batch 端点
  4. 删除作业定义中的 CPU/内存限制
  5. 检查 /etc/ecs/ecs.config
  6. 获取 ECS 日志 -https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-logs-collector.html

答案3

今天我遇到了同样的问题。我通过执行以下操作解决了此问题:

打开VPCSubnets<YOUR SUBNET>Subnet ActionsModify Auto-assign IP设置。

检查Enable auto-assign public IPV4 address 重新创建您的 AWS Batch 计算环境。

因为容器实例需要访问互联网。因此,容器实例需要一个全球公共 IP。

相关内容