通过 Auto Scaling 组生成的 ecs 实例未注册到 ecs 集群

通过 Auto Scaling 组生成的 ecs 实例未注册到 ecs 集群

我创建了一个链接到 Autoscaling 组的 ECS 集群,并附加了应用程序负载均衡器。Autoscaling 部署了实例,AMI 被正确选择(ECS 优化)。

无论出于什么原因,ecs 实例都由 Auto Scaling 服务部署,但未在 ECS 集群中注册。

有人知道是什么原因导致我的集群上没有实例的错误吗?

答案1

您的 EC2 实例没有足够的权限注册到 ECS 集群:

重要的

如果您没有使用适当的 IAM 权限启动容器实例,您的 Amazon ECS 代理将无法连接到您的集群。

检查您分配给 EC2 实例的 IAM 角色。它应包含适当的权限,例如:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecs:DeregisterContainerInstance",
        "ecs:RegisterContainerInstance",
        "ecr:GetAuthorizationToken"
      ],
      "Resource": "*"
    }
  ]
}

或者您可以使用 AWS 管理策略命名AmazonEC2ContainerServiceforEC2Role并将其分配给您的 EC2 角色。

更多信息请访问https://docs.aws.amazon.com/AmazonECS/latest/developerguide/instance_IAM_role.html

答案2

这也是使其工作所必需的;在创建和停止任务时,Amazon ECS 需要使用负载均衡器注册和取消注册容器实例的权限

{
  "Version": "2008-10-17",
  "Statement": [
{
     "Sid": "",
     "Effect": "Allow",
     "Principal": {
     "Service": "ecs.amazonaws.com"
    },
    "Action": "sts:AssumeRole"
   }
 ]
}

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/check-service-role.html

答案3

我们的用户数据脚本中有一个错误。我在 EC2 - 我的实例 -> 监控和故障排除 -> 获取系统日志中发现了错误。用户数据中的 bash 脚本在 ie 上有 -ex 标志#!/bin/bash -ex,它告诉脚本在出现任何错误时立即退出。EC2 任务将完成启动,并且在 Auto Scaling 组中看起来正常,但 cloud-init(EC2 初始化)已终止且未完成,导致实例未连接到 ECS 集群。一旦我修复了用户数据脚本中的错误并启动了一个新实例,它就可以按预期连接到 ECS 集群。

相关内容