基于AWS ECS的蓝绿部署流量切换及后续部署方案咨询
ECS Fargate 蓝绿部署流量切换及后续迭代流程方案
一、蓝环境到绿环境的流量切换步骤
所有操作优先通过Terraform代码变更执行,避免手动操作AWS控制台导致配置漂移:
- 切换前预检查
- 确认
service_green关联的所有ECS任务均处于Running状态,tg_green目标组的健康检查通过率为100% - 确认已通过差异化转发规则完成新版本的功能测试、性能压测,无业务异常
- 确认
- 流量切换操作
- 若需要灰度验证,可修改ALB转发规则为加权转发,初始给
tg_green分配10%~30%流量,观察监控指标无异常后逐步提升流量占比,直至100% - 若无需灰度,直接修改ALB默认转发规则的目标组,从
tg_blue替换为tg_green - 提交Terraform代码变更,经CI/CD执行
terraform plan确认变更内容符合预期后,执行terraform apply生效配置
- 若需要灰度验证,可修改ALB转发规则为加权转发,初始给
- 切换后验证&回滚预案
- 切换完成后持续观测15~30分钟,重点监控服务错误率、响应延迟、资源使用率、业务核心指标,确认无异常即切换完成
- 若出现异常,直接回滚Terraform变更,将转发规则恢复为指向
tg_blue即可实现秒级回滚
二、切换完成后后续迭代的部署流程设计
流量切到绿环境后,绿环境为当前生产环境,蓝环境可在稳定运行1~2天后销毁释放资源,后续迭代按照蓝绿交替的逻辑循环执行:
- 新版本提测阶段
- 新版本开发完成后,构建镜像推送至镜像仓库,更新任务定义配置
- 通过Terraform创建新版本对应的蓝环境资源:
tg_blue、service_blue、task_blue - 配置ALB差异化转发规则,支持测试人员通过指定请求头、测试域名访问新版本环境,完成无干扰测试
- 新版本上线阶段
- 测试通过后,修改ALB转发规则,将流量从当前生产环境(
tg_green)切换到新版本的tg_blue - 按照前面的切换验证流程完成上线验证
- 资源清理&循环准备
- 新版本稳定运行1~2天后,通过Terraform销毁旧的绿环境资源:
tg_green、service_green、task_green - 下一次迭代时,将新版本部署到空闲的绿环境中,重复上述流程即可
落地优化建议
- 可在Terraform中定义
current_prod_env变量,取值为blue/green,ALB转发规则动态引用对应环境的目标组,每次切换仅需修改该变量值即可,降低配置出错概率 - 蓝绿两个环境的CPU、内存、实例数、环境变量等配置除镜像版本外需保持一致,避免切换后出现性能兼容问题
- 数据库Schema变更需做双向兼容,保证新旧版本服务可同时读写数据库,避免切换过程中出现数据异常
内容的提问来源于stack exchange,提问作者Atul Singh
相关产品推荐
相关产品推荐

