You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CDK部署EC2型ECS失败,求助解决实例调度报错

解决ECS部署报错"No Container Instances were found in your cluster"

你的核心问题是ECS集群没有可用的容器实例,原因在于自动扩缩容组(ASG)使用了普通的Amazon Linux镜像,未预装ECS容器代理,导致实例无法向ECS集群注册;同时实例缺少必要的IAM权限,也会阻碍注册流程。

修复步骤及代码修改

1. 使用ECS优化镜像

替换普通的AmazonLinuxImage为ECS官方优化镜像,该镜像预装了ECS代理、Docker及其他必要组件,能自动完成实例向集群的注册。

2. 添加ECS实例IAM角色

ECS实例需要权限与ECS控制平面通信、拉取ECR镜像、发送日志等,因此要给ASG实例附加AmazonEC2ContainerServiceforEC2Role托管策略。

修改后的完整代码

const vpc = new ec2.Vpc(this, 'PersonalWebsiteVpc', {
    maxAzs: 2,
});

const cluster = new ecs.Cluster(this, 'PersonalWebsiteCluster', {
    vpc: vpc
});

// 创建ECS实例所需的IAM角色
const ecsInstanceRole = new iam.Role(this, 'EcsInstanceRole', {
    assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'),
    managedPolicies: [
        iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonEC2ContainerServiceforEC2Role')
    ]
});

const autoScalingGroup = new autoscaling.AutoScalingGroup(this, 'ASG', {
    vpc,
    instanceType: ec2.InstanceType.of(ec2.InstanceClass.T2, ec2.InstanceSize.SMALL),
    // 使用ECS优化的Amazon Linux 2镜像
    machineImage: ecs.EcsOptimizedImage.amazonLinux2(),
    minCapacity: 1,
    maxCapacity: 2,
    // 指定实例角色
    role: ecsInstanceRole
});

const capacityProvider = new ecs.AsgCapacityProvider(this, 'AsgCapacityProvider', {
    autoScalingGroup: autoScalingGroup,
});

cluster.addAsgCapacityProvider(capacityProvider);

const repository = ecr.Repository.fromRepositoryName(this, 'MyRepository', 'my-personal-website-repo');

const taskDefinition = new ecs.Ec2TaskDefinition(this, 'TaskDef');

const container = taskDefinition.addContainer('web', {
    image: ecs.ContainerImage.fromEcrRepository(repository, 'latest'),
    memoryLimitMiB: 1024,
    cpu: 512,
});

container.addPortMappings({
    containerPort: 80,
    hostPort: 80
});

new ecs.Ec2Service(this, 'EC2Service', {
    cluster,
    taskDefinition,
});

额外排查点(若修改后仍有问题)

  • 安全组配置:确保实例安全组允许出站HTTPS(443)访问,ECS代理需要通过该端口与ECS控制平面通信。
  • 网络连通性:实例需能访问互联网(通过NAT网关或公网IP),以便拉取ECR镜像和与ECS服务通信。
  • ECS代理日志:登录实例后查看/var/log/ecs/ecs-agent.log,日志会明确指出注册失败的具体原因。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 05:40:20