为什么 AWS Batch 作业卡在 RUNNABLE 状态?

Why are AWS Batch Jobs stuck in RUNNABLE?

我用的是0-256m3.medium个按需实例的计算环境。我的工作定义需要 1 CPU 和 3 GB 内存,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.

但这并没有回答我的问题

作业会卡在 RUNNABLE 中还有其他原因:

  • 与计算环境关联的角色权限不足
  • 计算环境实例无法访问互联网。 您需要将 NAT or Internet Gateway 关联到计算环境子网。
    • 确保检查 "Enable auto-assign public IPv4 address" 设置 在您的计算环境的子网上。 (@thisisbrians 在评论中指出)
  • 你的图片有问题。 您需要使用 ECS 优化的 AMI 或确保您的 ECS 容器代理正在运行。更多信息请见 aws docs
  • 您正在尝试启动您的帐户限制为 0 个实例的实例(EC2 控制台 > 限制,在左侧菜单中)。 (阅读更多
  • 并且如上所述资源不足

此外,请务必阅读 AWS Batch troubleshooting

至少应该使用下一个策略和信任关系来定义角色。否则,他们将陷入 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"
        }
      ]
    }
    

刚和这个打了一会,发现

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

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

单击计算环境为我提供了更多信息 - 我的 AMI ID 错误。

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

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