如何配置ECS蓝绿部署实现仅部署时动态创建新实例?
ECS蓝绿部署:实现「常态单实例+部署临时扩容」的配置方案
你的理解完全正确
你期望的「平时仅运行1个实例,部署阶段临时扩容为2个实例,完成后自动缩容回单实例」是标准蓝绿部署的合理场景,当前问题源于服务配置未匹配该模式的要求。
问题根源
你当前的部署属于容器级蓝绿部署(同一ECS实例同时运行新旧版本容器),核心原因:
- 实例剩余资源足够容纳两个任务实例
- 服务未关联Auto Scaling组或部署参数未开启临时扩容规则
- 任务放置策略未限制单实例的任务数量
具体配置步骤
1. 关联ECS服务与Auto Scaling组
- 创建或复用现有Auto Scaling组(ASG),设置最小实例数=1、最大实例数=2、期望实例数=1
- 在ECS服务的容量提供者配置中,将该ASG设为EC2容量提供者,确保ECS可触发ASG的扩容/缩容动作
2. 调整ECS服务部署参数
在ECS服务的部署配置中修改以下参数:
minimum healthy percent:设为100%,保证部署期间原有蓝版本实例始终健康可用maximum percent:设为200%,允许部署期间临时扩容到2个实例- 添加任务放置约束:限制每个实例仅能运行1个任务(通过
memberOf: ["attribute:ecs.instance-id == *"]规则实现)
3. 配置蓝绿部署的终止规则
在CodePipeline的ECS蓝绿部署动作中,开启部署成功后自动终止旧版本(蓝)任务选项,确保旧版本任务会在流量切换完成后被清理。
4. 匹配任务与实例资源
确保单个ECS实例的可用资源仅能容纳一个任务:
- 任务定义中设置硬内存限制为300MB
- 选用512MB规格的实例(扣除系统占用后,可用内存应小于600MB,避免ECS在同一实例调度两个任务)
预期部署流程
配置完成后,触发部署的流程会变为:
- ECS检测到需部署新版本任务,因单实例无法容纳,触发ASG扩容至2个实例
- 新版本任务调度到新实例,目标组B指向该实例
- ALB完成流量切换至目标组B
- 旧版本任务被终止,ASG自动缩容回1个实例,仅保留运行新版本的实例
内容的提问来源于stack exchange,提问作者Luna
相关产品推荐
相关产品推荐

