排查 Amazon ECS 托管实例问题 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

排查 Amazon ECS 托管实例问题

使用 Amazon ECS 托管实例启动任务时,Amazon ECS 会首先尝试将任务放置在现有容量上,并为无法放置的任务请求额外容量。如果实例预置失败,则 Amazon EC2 请求 ID 将包含在任务失败消息中。您可以使用此请求 ID 在 CloudTrail 中查找失败请求的详细信息,以便进一步排查问题。

注意

如果您选择应用最低权限,并为实例配置文件指定您自己的权限,而不是使用 AmazonECSInstanceRolePolicyForManagedInstances 托管策略,则可以添加以下权限,以帮助排查 Amazon ECS 托管实例与任务相关的问题:

  • ecs:StartTelemetrySession

  • ecs:PutSystemLogEvents

任务定义与 Amazon ECS 托管实例不兼容

常见原因

当您的任务定义包含 Amazon ECS 托管实例不支持的参数或配置时,会发生此错误。常见的不兼容包括不支持的网络模式、任务角色或资源要求。

解决方案

  1. 验证您的任务定义是否使用了设置为 MANAGED_INSTANCESrequiresCompatibilities

  2. 确保您的任务定义使用 awsvpc 网络模式。

  3. 检查 CPU 和内存值是否在 Amazon ECS 托管实例支持的范围内。

  4. 查看详细的错误消息以了解特定的不兼容详细信息。

容量提供程序未与集群关联

常见原因

当容量提供程序策略中指定的容量提供程序未与集群关联或不存在时,会发生此错误。

解决方案

  1. 验证容量提供程序是否存在于您的账户和区域中。

  2. 使用 Amazon ECS 控制台或 CLI 将容量提供程序与您的集群关联。

  3. 在使用容量提供程序之前,请确保其处于 ACTIVE 状态。

基础设施角色权限错误

常见原因

当 Amazon ECS 基础设施角色缺少代表您执行 Amazon EC2 操作的必要权限,或者由于信任关系问题而无法代入该角色时,会发生此错误。

解决方案

  1. 验证您的基础设施角色是否与 Amazon ECS 存在适当的信任关系。

  2. 确保该角色具有所需的 Amazon EC2 权限,包括 ec2:RunInstancesec2:DescribeInstancesiam:PassRole

  3. 查看 CloudTrail 中编码的授权失败消息,了解具体的权限详细信息。

  4. 更新角色策略,使其包含错误消息中指出的缺失权限。

VcpuLimitExceeded 错误

常见原因

当您已达到当前区域中实例类型系列的 vCPU 服务配额时,会发生此错误。只有在有可用容量时,Amazon ECS 托管实例才能启动其他实例。

解决方案

  1. 通过 Amazon 支持中心申请增加受影响实例类型系列的服务配额。

  2. 考虑使用属于不同 vCPU 配额类别的不同实例类型。

  3. 终止未使用的 Amazon EC2 实例,以释放 vCPU 容量。

  4. 检查您的容量提供程序配置,以使用 vCPU 要求较低的实例类型。

InsufficientCapacity 和相关的容量错误

常见原因

当 Amazon 没有足够的容量来满足您的实例请求时,就会出现这些错误。这可能包括所请求的可用区中的实例容量、地址容量或卷容量不足。

解决方案

  1. 通过在容量提供程序中配置多个子网,尝试在不同的可用区中启动实例。

  2. 考虑使用可能具有更多可用容量的不同实例类型。

  3. 由于容量可用性频繁变化,请等待并重试操作。

  4. 对于持续的容量需求,请考虑使用预留实例或节省计划。

UnauthorizedOperation 错误

常见原因

当 Amazon ECS 服务没有执行 Amazon EC2 操作或传递 IAM 角色所需的必要权限时,会发生此错误。常见情况包括实例配置文件缺少 ec2:RunInstances 权限或 iam:PassRole 权限。

解决方案

  1. 验证 Amazon ECS 基础设施角色是否具有启动 Amazon EC2 实例所需的权限。

  2. 确保基础设施角色拥有 Amazon ECS 托管实例使用的实例配置文件的 iam:PassRole 权限。

  3. 查看 CloudTrail 中编码的授权失败消息,了解具体的权限详细信息。

  4. 更新角色策略,使其包含错误消息中指出的缺失权限。

等待容量时任务超时

常见原因

当实例启动并注册到集群所需的时间超出预期时,会出现此错误。这可能是由于 Amazon EC2 容量约束、实例启动失败或网络连接问题造成的。

解决方案

  1. 检查您所在区域的 Amazon EC2 服务运行状况,查看是否存在任何持续问题。

  2. 验证您的子网是否有足够的可用 IP 地址。

  3. 确保您的安全组允许 Amazon ECS 代理通信所需的流量。

  4. 考虑使用多个可用区来提高容量可用性。

  5. 由于容量约束通常是暂时的,请重试任务启动操作。

网络配置错误

常见原因

当您的任务的网络要求与容量提供程序的网络配置不匹配时(例如,VPC 不匹配或缺少网络配置),会发生这些错误。

解决方案

  1. 验证您的容量提供程序是否配置了正确的 VPC 和子网。

  2. 确保安全组和子网属于同一个 VPC。

  3. 检查任务定义的网络配置是否与容量提供程序兼容。

  4. 使用正确的网络设置更新容量提供程序配置。

由于实例卡住,无法删除容量提供程序

常见原因

当 Amazon ECS 托管实例停滞在 ACTIVEDRAINING 状态,但实例上没有正在运行的任务时,就会出现这些错误。

解决方案

要允许继续删除容量提供程序,您可以使用下面的命令强制注销卡住的实例。

aws ecs deregister-container-instance \ --cluster arn:aws:ecs:us-east-1:111122223333:cluster/MyCluster \ --container-instance arn:aws:ecs:us-east-1:111122223333:container-instance/a1b2c3d4-5678-90ab-cdef-11111EXAMPLE \ --force