AWS Batch
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

排查 AWS Batch 问题

您可能会发现需要排查计算环境、作业队列、作业定义或作业的问题。本章帮助您排查和修复您的 AWS Batch 环境的问题。

INVALID 计算环境

可能会错误地配置托管计算环境,使其进入 INVALID 状态,而无法接受作业进行放置。以下各节介绍了可能的原因以及修复方法。

角色名称或 ARN 不正确

无效计算环境的最常见原因是 AWS Batch 服务角色或 Amazon EC2 Spot 队组角色的名称或 ARN 不正确。对于使用 AWS CLI 或 AWS 开发工具包创建的计算环境,这更是一个问题;当您在 AWS 管理控制台中创建计算环境时,AWS Batch 可以帮助您选择正确的服务或 Spot 队组角色,您不会拼错名称或使用格式错误的 ARN。

但是,如果您在 AWS CLI 命令或软件开发工具包代码中手动键入 IAM 的名称或 ARN,则 AWS Batch 将无法验证字符串,从而接受该错误值并尝试创建环境。创建环境失败后,环境将进入 INVALID 状态,您会看到以下错误。

对于无效的服务角色:

CLIENT_ERROR - Not authorized to perform sts:AssumeRole (Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied; Request ID: dc0e2d28-2e99-11e7-b372-7fcc6fb65fe7)

对于无效的 Spot 队列角色:

CLIENT_ERROR - Parameter: SpotFleetRequestConfig.IamFleetRole is invalid. (Service: AmazonEC2; Status Code: 400; Error Code: InvalidSpotFleetRequestConfig; Request ID: 331205f0-5ae3-4cea-bac4-897769639f8d) Parameter: SpotFleetRequestConfig.IamFleetRole is invalid

导致此问题的一个常见原因是您在使用 AWS CLI 或 AWS 开发工具包时仅指定 IAM 角色的名称,而不是完整 ARN。这是因为根据您创建角色的方式,ARN 可能包含 service-role 路径前缀。例如,如果您使用 AWS Batch 服务 IAM 角色中的步骤手动创建 AWS Batch 服务角色,您的服务角色 ARN 将如下所示:

arn:aws:iam::123456789012:role/AWSBatchServiceRole

但是,如果您在控制台首次运行向导的过程中创建了服务角色,那么您的服务角色 ARN 将如下所示:

arn:aws:iam::123456789012:role/service-role/AWSBatchServiceRole

如果您在使用 AWS CLI 或 AWS 开发工具包时仅指定 IAM 角色的名称,AWS Batch 将假定您的 ARN 不使用 service-role 路径前缀。因此,我们建议您在创建计算环境时为 IAM 角色指定完整 ARN。

要修复以这种方式错误配置的计算环境,请参阅修复 INVALID 计算环境

修复 INVALID 计算环境

当您拥有处于 INVALID 状态的计算环境时,您应该更新它以修复无效参数。对于 角色名称或 ARN 不正确 的情况,您可以使用正确的服务角色更新计算环境。

修复配置错误的计算环境

  1. https://console.amazonaws.cn/batch/ 打开 AWS Batch 控制台。

  2. 从导航栏中,选择要使用的区域。

  3. 在导航窗格中,选择 Compute environments

  4. Compute environments 页面上,选择要编辑的计算环境旁边的单选按钮,然后选择 Edit

  5. 更新计算环境页面上,对于服务角色,请选择要用于您的计算环境的 IAM 角色。AWS Batch 控制台仅显示与计算环境具有正确信任关系的角色。

  6. 选择 Save 以更新您的计算环境。

作业在 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 ECS 容器代理和其他关键系统进程保留了i一些内存。有关更多信息,请参阅 Memory Management

没有 Internet 访问权限,无法获得计算资源

need access to communicate with the Amazon ECS service endpoint. This can be through an interface VPC endpoint or through your having public IP addresses.

For more information about interface VPC endpoints, see .

If you do not have an interface VPC endpoint configured and your do not have public IP addresses, then they must use network address translation (NAT) to provide this access. For more information, see NAT Gateways in the Amazon VPC 用户指南. For more information, see Tutorial: Creating a VPC with Public and Private Subnets for Your .

已达到 Amazon EC2 实例限制

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

有关诊断处于 RUNNABLE 状态的作业的详细信息,请参阅 AWS 知识中心中的我的 AWS Batch 作业为什么卡在 RUNNABLE 状态?

在创建时未标记的 Spot 实例

从 2017 年 10 月 25 日起支持对 AWS Batch 计算资源标记 Spot 实例。在提供此支持之前,建议对 Amazon EC2 Spot 队组角色使用的 IAM 托管策略 (AmazonEC2SpotFleetRole) 不包含在 Spot 实例启动时对其进行标记的权限。推荐使用的新 IAM 托管策略称为 AmazonEC2SpotFleetTaggingRole

要解决创建时为 Spot 实例添加标签的问题,请按以下过程操作,将当前推荐的 IAM 托管策略应用于您的 Amazon EC2 Spot 队组角色,这样,将来使用该角色创建的任何 Spot 实例都将有权在创建时应用实例标签。

将当前 IAM 托管策略应用于您的 Amazon EC2 Spot 队组角色

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  2. 选择角色,然后选择您的 Amazon EC2 Spot 队组角色。

  3. 选择 Attach policy

  4. 选择 AmazonEC2SpotFleetTaggingRole,然后选择 Attach policy

  5. 再次选择您的 Amazon EC2 Spot 队列角色,以移除以前的策略。

  6. 选择 AmazonEC2SpotFleetRole 策略右侧的 x,然后选择 Detach