排除 Amazon Batch 的故障 - Amazon Batch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

排除 Amazon Batch 的故障

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

INVALID 计算环境

可能会错误地配置托管计算环境,从而使它进入INVALID州,不能接受安置工作。以下各节介绍了可能的原因以及修复方法。

角色名称或 ARN 不正确

无效计算环境的最常见原因是名称或 ARN 不正确Amazon Batch服务角色或 Amazon EC2 Spot 队列角色。对于使用Amazon CLI或者Amazon开发工具包。在中创建计算环境时Amazon Web Services Management Console、Amazon Batch可以帮助你选择正确的服务或竞价型队列角色。但是,您不能拼写名称或使 ARN 变形。

但是,如果您在Amazon CLI命令或你的 SDK 代码,Amazon 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

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

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

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

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

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

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

修复 INVALID 计算环境

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

修复配置错误的计算环境

  1. 打开Amazon Batch控制台https://console.aws.amazon.com/batch/.

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

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

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

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

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

作业在 RUNNABLE 状态卡住

如果你的计算环境包含计算资源,但你的作业的进展不超出RUNNABLE状态,则表明出现问题,导致作业无法被实际放置在计算资源上。以下是此问题的一些常见原因:

这些区域有:awslogs您的计算资源上未配置日志驱动程序

Amazon Batch作业将它们的日志信息发送到 CloudWatch Logs。为了做到这一点,您必须将您的计算资源配置为使用 awslogs 日志驱动程序。如果您的计算资源 AMI 基于经 Amazon ECS 优化的 AMI(或 Amazon Linux),则该驱动程序默认向ecs-init软件包。如果你使用不同的基本 AMI,那么你必须验证awslogs将日志驱动程序指定为可用的日志驱动程序,ECS_AVAILABLE_LOGGING_DRIVERS启动 Amazon ECS 容器代理时的环境变量。有关更多信息,请参阅 计算资源 AMI 规范创建计算资源 AMI

资源不足

如果您的作业定义指定的 CPU 或内存资源超出可分配的计算资源量,那么您的作业将永远不会被放置。例如,如果您的作业指定了 4 GiB 的内存,而您的可用计算资源少于此数量,则无法将作业放置在这些计算资源上。在这种情况下,您必须减少作业定义中指定的内存,或者向您的环境中添加更大的计算资源。为 Amazon ECS 容器代理和其他关键系统进程保留了一些内存。有关更多信息,请参阅计算资源内存管理

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

计算资源需要访问才能与 Amazon ECS 服务端点通信。这可以通过接口 VPC 端点或具有公共 IP 地址的计算资源实现。

有关接口 VPC 端点的更多信息,请参阅 Amazon Elastic Container Service 开发人员指南中的 Amazon ECS 接口 VPC 端点(Amazon PrivateLink)

如果您没有配置接口 VPC 端点,并且您的计算资源没有公有 IP 地址,必须使用网络地址转换 (NAT) 来提供此访问。有关更多信息,请参阅 Amazon VPC 用户指南中的 。有关更多信息,请参阅教程:为您的公有和私有子网创建 VPC计算环境

达到 Amazon EC2 实例限制

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

有关诊断卡在中的作业的更多信息RUNNABLE状态,请参阅为什么是我的AmazonBatch 作业陷入 RUNNABLE 状态?中的Amazon知识中心.

在创建时未标记的 Spot 实例

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

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

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

  1. 访问:https://console.aws.amazon.com/iam/,打开 IAM 控制台。

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

  3. 选择 Attach policy(附加策略)。

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

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

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

竞价型实例没有缩小

Amazon Batch引入适用于批处理的 Amazon 服务角色2021 年 3 月 10 日与服务相关的角色。如果在serviceRole计算环境的参数。如果在 EC2 竞价型计算环境中使用了服务相关角色,但使用的竞价型角色不包括Amazonec2Spot 队列标签角色托管策略,竞价型实例不会缩小规模。您将收到以下消息的错误消息:“您无权执行此操作。” 使用以下步骤更新您在spotIamFleetRole参数。有关更多信息,请参阅 。使用服务相关角色创建向Amazon服务中的IAM 用户指南.

AttachAmazonec2Spot 队列标签角色托管策略中您的 Spot 队组角色Amazon Web Services Management Console

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

  1. 访问:https://console.aws.amazon.com/iam/,打开 IAM 控制台。

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

  3. 选择 Attach policy(附加策略)。

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

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

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

AttachAmazonec2Spot 队列标签角色托管策略使用您的 Spot 队组角色Amazon CLI

示例命令假定您的 Amazon EC2 竞价型队列角色被命名为卓越亚马逊 EC2SpotFleetRole. 如果你的角色使用不同的名称,请调整命令以匹配。

附加Amazonec2Spot 队列标签角色您的 Spot 队列角色的托管策略

  1. 附加Amazonec2Spot 队列标签角色托管 IAM 策略卓越亚马逊 EC2SpotFleetRole角色中运行以下命令,使用Amazon CLI.

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2SpotFleetTaggingRole \ --role-name AmazonEC2SpotFleetRole
  2. 分离卓越亚马逊 EC2SpotFleetRole来自您的托管 IAM 策略卓越亚马逊 EC2SpotFleetRole角色中运行以下命令,使用Amazon CLI.

    aws iam detach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2SpotFleetRole \ --role-name AmazonEC2SpotFleetRole

无法检索 Secrets Manager 密钥

如果您将 AMI 与 Amazon ECS 代理一起使用早于 1.16.0-1 版本,则必须使用 Amazon ECS 代理配置变量ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE=true使用此功能。您可以在创建容器实例的过程中将其添加到 ./etc/ecs/ecs.config 文件中,也可以将其添加到现有实例中,然后重新启动 ECS 代理。有关更多信息,请参阅 。Amazon ECS 容器代理配置中的Amazon Elastic Container Server 开发者指南.

无法覆盖作业定义资源要求

中指定的内存和 vCPU 覆盖memoryvcpus成员容器覆盖传递到的结构SubmitJob无法覆盖中指定的内存和 vCPU 要求ResourceRecrements作业定义中的结构。

如果您尝试覆盖这些资源要求,您可能会看到以下错误消息:

“此值是用弃用的密钥提交的,可能与作业定义的资源要求提供的值冲突。”

要更正此问题 vCPU 请在ResourceRecrements成员容器覆盖. 例如,如果在以下行中指定了内存和 vCPU 覆盖:

"containerOverrides": { "memory": 8192, "vcpus": 4 }

将它们更改为这个:

"containerOverrides": { "resourceRequirements": [ { "type": "MEMORY", "value": "8192" }, { "type": "VCPU", "value": "4" } ], }

对中指定的内存和 vCPU 要求进行相同的更改ContainerProperties作业定义中的对象。例如,如果在以下行中指定了内存和 vCPU 要求:

{ "containerProperties": { "memory": 4096, "vcpus": 2, }

将它们更改为这个:

"containerProperties": { "resourceRequirements": [ { "type": "MEMORY", "value": "4096" }, { "type": "VCPU", "value": "2" } ], }