遗留EC2与ECS Fargate蓝绿部署下ALB流量权重分配报错解决方案咨询
解决方案:ECS蓝绿部署与遗留EC2流量权重分配兼容方案
核心问题分析
ECS蓝绿部署的默认逻辑会独占ALB监听器的目标组配置,当监听器中存在部署流程外的目标组(比如遗留EC2的目标组)时,部署过程会触发冲突错误——因为蓝绿部署会尝试替换监听器的所有关联目标组,而非仅管理ECS相关的目标组。
可行解决方案
方案1:用ALB规则分流替代监听器权重配置
放弃直接在监听器层面配置目标组权重,改用ALB的路由规则实现流量分支:
- 为遗留EC2创建独立目标组
TG-EC2,保留ECS蓝绿部署的两个默认目标组(TG-Blue、TG-Green) - 在ALB监听器中添加规则:
- 规则1:按需求比例(如20%)转发到
TG-EC2(在规则的「转发操作」中设置权重即可) - 规则2:剩余流量转发到ECS的主目标组(蓝绿部署会自动切换
TG-Blue/TG-Green作为主目标组)
- 规则1:按需求比例(如20%)转发到
- 优势:完全兼容ECS蓝绿部署默认流程,无需修改部署配置;流量比例可通过规则随时调整
方案2:自定义ECS蓝绿部署生命周期钩子
通过Lambda函数嵌入部署流程,规避监听器目标组冲突:
- 在ECS蓝绿部署的
BeforeTraffic阶段执行Lambda:- 读取当前ALB监听器关联的所有目标组,留存遗留EC2目标组的信息
- 临时移除监听器中的
TG-EC2,让蓝绿部署正常执行目标组切换
- 在
AfterTraffic阶段执行Lambda:- 将
TG-EC2重新添加回监听器,并配置对应权重比例
- 将
- 注意:需为Lambda配置
elasticloadbalancing:ModifyListener、elasticloadbalancing:DescribeListeners权限 - 优势:保留监听器层面的权重配置逻辑,适合依赖权重分配的场景
方案3:拆分ALB隔离两类服务
为遗留EC2和ECS服务分别配置独立ALB:
- 原ALB仅关联ECS蓝绿部署的目标组,正常执行部署流程
- 新建ALB关联遗留EC2的目标组
- 通过Route 53的加权路由策略,将整体流量按比例分配到两个ALB
- 优势:彻底隔离两类服务的部署与流量配置,无冲突风险;适合遗留服务长期存在的场景
临时测试方案
若仅需短期验证流量分配逻辑,可在执行ECS蓝绿部署前手动移除监听器中的TG-EC2,部署完成后再重新添加并配置权重。此方法仅适合测试场景,不建议用于生产环境。
内容的提问来源于stack exchange,提问作者김성우
相关产品推荐
相关产品推荐

