为啥 AWS Batch 作业卡在 RUNNABLE 中?

Posted

技术标签:

【中文标题】为啥 AWS Batch 作业卡在 RUNNABLE 中?【英文标题】:Why are AWS Batch Jobs stuck in RUNNABLE?为什么 AWS Batch 作业卡在 RUNNABLE 中? 【发布时间】:2018-06-17 11:50:01 【问题描述】:

我使用 0-256 m3.medium on demand 实例的计算环境。我的 Job 定义需要 1 个 CPU 和 3 GB 的 Ram,m3.medium 有。

AWS Batch 作业卡在状态 RUNNABLE 的可能原因有哪些?

AWS 说:

A job that resides in the queue, has no outstanding dependencies, and is therefore ready to be scheduled to a host. Jobs in this state are started as soon as sufficient resources are available in one of the compute environments that are mapped to the job’s queue. However, jobs can remain in this state indefinitely when sufficient resources are unavailable.

但这并不能回答我的问题

【问题讨论】:

【参考方案1】:

Job 卡在 RUNNABLE 中还有其他原因:

与计算环境关联的角色权限不足 计算环境实例无法访问 Internet。 您需要将NAT 或Internet Gateway 关联到计算环境子网。 确保选中“启用自动分配公共 IPv4 地址”设置 在您的计算环境的子网上。 (由 cmets 中的@thisisbrians 指出) 您的图像有问题。 您需要使用 ECS 优化的 AMI 或确保 ECS 容器代理正常工作。更多信息aws docs 您正在尝试启动您的帐户被限制为 0 个实例的实例(EC2 控制台 > 限制,在左侧菜单中)。 (阅读更多gergely-danyi comment) 如前所述,资源不足

另外,请务必阅读AWS Batch troubleshooting

【讨论】:

在我的特殊情况下,我必须检查计算环境子网上的“启用自动分配公共 IPv4 地址”设置才能运行我的作业。 对我来说,Batch 尝试启动一个实例,该实例在 EC2 限制设置中被限制为 0 个实例。检查这个:forums.aws.amazon.com/thread.jspa?threadID=263152 我在我的计算资源中指定了c5 实例类型,即使 c5.large 的限制为 5 Batch 决定启动一个更大的类型,限制为 0(而不是旋转多个 c5.large 的)。我将计算资源范围缩小到c5.large,这解决了这个问题。或者,您可以请求限制调整。 关于'Problems with your image',这不是指docker image 吗?如果我选择托管批处理实例,它会自动启动 aws linux AMI,然后在 aws 自动生成的 ECS 上运行我在作业定义中定义的 docker 映像?当我选择托管批处理选项时,我是否需要指定/运行任何 ECS 或 EC2?因此,如果我的 docker 从 openjdk:8-jre-slim 运行就可以了? 在我的 aws 中,我可以看到创建了新的 ec2 实例,但是,批处理作业仍然卡在可运行状态,然后实例就一直在运行,但是没有执行任何作业。跨度> 如果您使用的是 Docker 镜像,请确保在镜像参考中包含标签(对我来说是“:latest”后缀)。一旦我解决了这个问题,AWS Batch 就能够检测到我的 ComputeEnvironment 无效——我曾使用 EcsInstanceRole 作为 InstanceRole,但您应该改用 EcsInstanceProfile(它引用 EcsInstanceRole)。修复这两个后,不超过 5 分钟,工作就开始了。【参考方案2】:

至少应该使用下一个策略和受信任的关系来定义角色。如果没有,他们将卡在 RUNNABLE 中,因为他们没有足够的权限来启动:

 AWSBatchServiceRole

附加政策:AWSBatchServiceRole

信任关系:batch.amazonaws.com


  "Version": "2012-10-17",
  "Statement": [
    
      "Effect": "Allow",
      "Principal": 
         "Service": "batch.amazonaws.com"
       ,
      "Action": "sts:AssumeRole"
    
  ]

ecsInstanceRole

附加政策:AmazonEC2ContainerServiceforEC2Role

信任关系:ec2.amazonaws.com


  "Version": "2012-10-17",
  "Statement": [
    
      "Effect": "Allow",
      "Principal": 
         "Service": "ec2.amazonaws.com"
       ,
      "Action": "sts:AssumeRole"
    
  ]

【讨论】:

这两条规则是否由 AWS 维护?【参考方案3】:

我只是和这个打了一段时间,发现the answer。

作业卡在Runnable 中的一个可能原因是没有实例可以运行作业。如果是这种情况,查看上述答案中提到的 Auto Scaling 组可以向您显示阻止实例启动的实际错误,引导您找到确切的问题,而不是让您尝试任何数量的解决方案来解决您不知道的问题没有。错误消息是我们的朋友。

【讨论】:

【参考方案4】:

您的计算环境可能无效。检查 AWS Batch -> 计算环境 -> 状态列。我的说无效,这个符号在计算环境名称旁边:

点击计算环境给了我更多信息 - 我的 AMI ID 错误。

【讨论】:

【参考方案5】:

如果有用,想分享这个来自 AWS 云支持工程师的非常有用的视频:

https://aws.amazon.com/premiumsupport/knowledge-center/batch-job-stuck-runnable-status/

【讨论】:

以上是关于为啥 AWS Batch 作业卡在 RUNNABLE 中?的主要内容,如果未能解决你的问题,请参考以下文章

将 SSH 隧道反向到 AWS Batch 阵列作业

无法使用 Secrets Manager 密钥注册 AWS Batch 作业定义

尽管用户角色,AWS Batch 作业在 S3 上被拒绝访问

Step Function 中的 AWS Batch 作业执行结果

如何查看 AWS Batch 计算环境错误?

AWS Step and Batch 动态命令