我创建了一个链接到 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 集群。