配置EC2服务的CapacityProviderStrategies提示容量提供商未找到
ECS容量提供商绑定服务报错的解决方法
问题场景
创建两组AutoScalingGroup、AsgCapacityProvider,以及两个ECS on EC2服务,尝试将容量提供商与对应服务绑定时报错:The specified capacity provider myapp-dev-admin-cp was not found。已确认容量提供商已添加到集群,使用的是ECS on EC2模式。
错误原因
代码中capacityProviderStrategies直接使用字符串形式的容量提供商名称,而CDK需要通过资源对象引用来管理依赖关系,直接传字符串无法让CDK识别到已创建的容量提供商资源,导致部署时找不到对应资源。
正确配置方式
- 直接引用之前创建的
AsgCapacityProvider对象,而非手动拼接字符串名称 capacityProviderStrategies是一个数组,每个元素为包含capacityProvider字段的对象,还可按需添加weight(权重)、base(基础任务数)等参数
修正后的代码示例
const adminCapacityProvider = new ecs.AsgCapacityProvider(this, 'admin-asg-capacity-provider', { autoScalingGroup: adminAutoScalingGroup, capacityProviderName: `myapp-${targetEnv}-admin-cp` }); const adminCapacityProvider2 = new ecs.AsgCapacityProvider(this, 'admin-asg-capacity-provider2', { autoScalingGroup: adminAutoScalingGroup2, capacityProviderName: `myapp-${targetEnv}-admin-cp2` }); cluster.addAsgCapacityProvider(adminCapacityProvider); cluster.addAsgCapacityProvider(adminCapacityProvider2); // 修正后的ECS服务配置 const ecsAiService = new ecs.Ec2Service(this, 'AiService', { cluster, taskDefinition: aiTaskDefinition, serviceName: `myapp-${targetEnv}-ai-service`, enableExecuteCommand: true, securityGroups: [adminServiceSg], vpcSubnets: { subnetType: ec2.SubnetType.PUBLIC }, capacityProviderStrategies: [ { capacityProvider: adminCapacityProvider // 直接引用对象而非字符串 // 可选:添加weight和base参数,例如 weight: 1, base: 0 } ] });
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

