我无法使用 Amazon Elastic Container Service(Amazon ECS)集群注册 Amazon Elastic Compute Cloud(Amazon EC2)实例。
解决方法
先决条件
在完成以下手动步骤之前,使用 AWSSupport-TroubleshootECSContainerInstance AWS Systems Manager 运行手册自动检查是否存在潜在问题。
AWSSupport-TroubleshootECSContainerInstance AWS Systems Manager 运行手册会自动排查您的 Amazon EC2 实例无法注册或加入集群的常见原因。该运行手册会检查以下要求:
**注意:**请确保在您的 ECS 集群和 EC2 实例所在的 AWS 区域使用 AWSSupport-TroubleshootECSContainerInstance 运行手册。
如果运行手册的输出未给出建议,则请使用以下解决办法手动解决此问题。
确认 Amazon Linux 2 实例上 Amazon ECS 代理的状态
要检查实例上的 Amazon ECS 容器代理是否运行,请运行以下命令:
sudo systemctl status ecs
如果在您的实例上容器代理未运行,运行以下命令来启动代理:
sudo systemctl start ecs
命令输出的输出必须类似于以下命令输出示例:
ecs start/running, process 23403
检查启动配置
如果启动实例属于某个 AWS 应用程序 Auto Scaling 组,确认该 Auto Scaling 组的启动配置正确。有关更多信息,请参阅使用新 AMI 刷新 Amazon ECS 容器实例集群中的创建新启动配置步骤。
检查您的实例的亚马逊机器映像(AMI)
如果您用于 EC2 实例的 AMI 是复制的或自定义 AMI,确认该实例满足以下要求:
经过 Amazon ECS 优化的 AMI 已按照这些要求预先配置。除非您的应用程序需要该 AMI 中还不可用的版本,否则最佳做法是使用经过 Amazon ECS 优化的 AMI。
检查实例的用户数据是否包含正确的集群信息
要检查实例的用户数据是否包含正确的集群信息,请运行以下命令:
#!/bin/bash
echo ECS_CLUSTER=<cluster-name> >> /etc/ecs/ecs.config
验证日志文件
如果问题仍然存在,请使用 Amazon ECS 日志收集器收集日志。然后,查看日志以找出原因。您还可以在容器主机上检查容器代理和 Docker 的日志文件。
要查看容器代理和 Docker 的日志文件,请运行以下命令:
sudo cat /var/log/ecs/ecs-agent.log.YYYY-MM-DD-**sudo cat /var/log/docker
排除常见错误
错误: 启动新 EC2 实例。状态描述: 此账户目前已被锁定,未被识别为有效账户。如果您有任何问题,请联系 aws-verification@amazon.com。启动 EC2 实例失败。
当您的账户被冻结且亚马逊无法识别您的账户时,就会出现此错误。要解禁账户,请发送电子邮件至 aws-verification@amazon.com。请务必在电子邮件中注明您需要解禁帐户。
Error: re-registering: ClientException: 容器实例 12345678910xxxxxxxxxxxx 处于非活动状态。\n\t状态代码: 400,请求 ID: 012345678a-012345b-012ab-0a1-9f645f4s5c12" module=agent.go
当 ECS 代理由于 EC2 实例处于非活动状态而无法使用 ECS 集群注册 EC2 容器实例时,会出现此错误。此错误与实例上运行的应用程序有关。要了解出错原因,请先检查应用程序。如果错误仍然存在,检查 ECS 代理日志。
错误: 只有很少的配置相同的实例能够加入集群,其他实例无法加入集群。
出现此错误是由于特定 API 调用超过速率限制时引发的 ThrottlingException。要解决此错误,请提高账户级别的速率限制。检查 API,如 RegisterTargets 和 RegisterContainerInstance。
错误: 更改实例类型后,新实例无法加入集群。
当 ECS 代理卡在待处理状态,您无法更改实例类型时,会出现此错误。要在 Amazon ECS 中更改实例类型,请完成以下步骤:
- 删除容器实例。
- 启动具有新实例大小的新容器实例。
注意: 最佳做法是使用经过 Amazon ECS 优化的 Amazon Linux 2 AMI 为您的集群启动实例。
或者,您可以创建新的启动配置。然后,更新 Auto Scaling 组中的启动配置。
有关详细信息,请参阅如何在 Amazon ECS 中更改容器实例类型?
错误: 无法在 ECS 中注册为容器实例: AccessDeniedException: 用户 arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-00aa11bb22cc33def 未被授予在资源 arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster 上执行 ecs:RegisterContainerInstance 的权限。状态代码: 400,请求 ID: 0a123456-7899-10101-a987-6543210deff
-或-
错误: 2019-06-29T16:10:09Z [ERROR] 重新注册时出错: AccessDeniedException: 用户 arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-0052b2e858b1891ef 未被授予在资源 arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster 上执行 ecs:RegisterContainerInstance 的权限。状态代码: 400,请求 ID: 0a123456-7899-10101-a987-123456pqrs
出现这些错误是由于缺少 IAM 权限。要排除这些错误,您必须创建容器实例 IAM 角色。
然后,运行 AWSSupport-TroubleshootECSContainerInstance 运行手册,确定容器实例角色缺少哪些权限。
相关信息
创建虚拟私有云
为什么我的 Amazon ECS 容器实例的 Amazon Linux 1 AMI 断开连接?
Amazon ECS 故障排除
创建您自己的运行手册