AWS CodeDeploy 的部署策略 - EC2、ECS、Lambda 的蓝绿部署
统一管理面向 EC2、ECS、Lambda 三个平台的部署策略。介绍 ECS 蓝绿部署和与 CloudWatch 告警联动的自动回滚。
CodeDeploy 支持的平台与部署类型
CodeDeploy 是支持 EC2/本地、ECS 和 Lambda 三个平台的部署服务。EC2/本地支持就地部署(顺序更新现有实例)和蓝绿部署(创建新实例组后切换)。ECS 仅支持蓝绿部署,启动新任务集后切换目标组。Lambda 支持流量转移部署,按指定比例将流量从旧版本逐步转移到新版本。
ECS 蓝绿部署的设计
ECS 的蓝绿部署在 ALB 上设置 2 个目标组(生产用和测试用)。部署开始时启动新任务集(Green)并注册到测试目标组。通过测试监听端口确认 Green 环境的运行状况,无问题后将生产监听器的流量切换到 Green。切换后旧任务集(Blue)在指定的等待时间内保留,如果发现问题可以立即回滚。流量切换支持一次性切换和线性/金丝雀方式的渐进切换。
自动回滚与告警联动
CodeDeploy 的自动回滚在部署失败和 CloudWatch 告警触发两种情况下动作。与 CloudWatch 告警联动时,监控部署后的错误率(5xx 响应比例)、延迟(p99 响应时间)和业务指标(订单成功率等),超过阈值时自动回滚到前一版本。Lambda 的流量转移部署中,可以设置金丝雀方式(先转移 10% 流量,5 分钟后转移剩余 90%),在金丝雀阶段检测到问题时自动回滚。
CodeDeploy 的定价
CodeDeploy 向 EC2、ECS、Lambda 的部署全部免费。蓝绿部署期间临时运行双倍资源的计算费用会产生,但 CodeDeploy 本身不收取额外费用。ECS 蓝绿部署中,从 Green 任务集启动到流量切换期间,Blue 和 Green 两个任务集同时运行,该期间的 Fargate 或 EC2 费用翻倍。
总结
CodeDeploy 是统一管理面向 EC2、ECS、Lambda 安全部署的服务。通过蓝绿部署和流量转移最小化生产环境风险,通过与 CloudWatch 告警联动实现问题发生时的自动回滚。通过 AppSpec 的生命周期钩子在部署过程中嵌入测试,构建保证质量的部署自动化。