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。

但是,如 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或Amazon软件开发工具包,而不是完整的 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

如果您在使用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 ECS 接口 VPC 终端节点 ( Amazon PrivateLink )中的Amazon Elastic Container Service 开发指南

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

Amazon EC2 实例已达到限制

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

有关诊断卡在中的作业的更多信息RUNNABLE状态,请参阅为什么选择我的AmazonBatch 作业卡住在可运行状态?中的Amazon知识中心

在创建时未标记的 Spot 实例

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

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

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

  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

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

  3. 选择 Attach policy

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

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

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

竞价型实例不缩小

Amazon Batch引入的用于批处理的 Amazon 服务与服务相关的角色。如果未在serviceRole参数。如果在 EC2 竞价计算环境中使用了与服务关联的角色,但使用的竞价角色不包括卓越亚马逊 2 现场追踪角色托管策略,竞价型实例将不会缩小。出现的错误是 “您没有权限执行此操作。” 使用以下说明更新您在spotIamFleetRole参数。有关更多信息,请参阅 。使用服务相关角色创建向Amazon服务中的IAM 用户指南

AttachAmazonEC2SpotFleetTaggingRole托管策略添加到您的 Spot 队组角色,在Amazon Web Services Management Console

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

  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

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

  3. 选择 Attach policy

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

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

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

AttachAmazonEC2SpotFleetTaggingRole托管策略转换为您的 Spot 队组角色,使用Amazon CLI

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

AmazonEC2SpotFleetTaggingRole托管策略转换为您的 Spot 队组角色

  1. 卓越亚马逊 2 现场追踪角色托管 IAM 策略添加到您的卓越亚马逊 2 波点角色运行以下命令,请使用Amazon CLI:

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

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