AWS CodeDeploy

自动化向 EC2、Lambda、ECS 部署应用的服务,通过滚动更新和蓝绿部署实现安全发布

概述

AWS CodeDeploy 是一项全托管服务,用于自动化向 EC2 实例、本地服务器、Lambda 函数和 ECS 服务部署应用。通过 AppSpec 文件定义部署各阶段(BeforeInstall、AfterInstall、ApplicationStart 等)的钩子脚本,精细控制部署流程。支持滚动更新、蓝绿部署、金丝雀部署等多种部署策略,自动回滚功能可在故障时快速恢复。

AppSpec 文件与生命周期钩子的部署控制设计

CodeDeploy 的部署流程通过 AppSpec 文件(appspec.yml)以声明式方式定义。EC2/本地部署中,指定文件复制目标(files 部分)和各生命周期事件的钩子脚本(hooks 部分)。生命周期事件按 BeforeInstall → Install → AfterInstall → ApplicationStart → ValidateService 顺序执行,每个阶段可运行 Shell 脚本或 PowerShell 脚本。例如在 BeforeInstall 中从负载均衡器注销、AfterInstall 中替换配置文件的环境变量、ValidateService 中调用健康检查 API 是常见做法。Lambda 部署的 AppSpec 结构不同,定义流量迁移方式(AllAtOnce、Linear、Canary)和 BeforeAllowTraffic / AfterAllowTraffic 钩子(以 Lambda 函数形式)。ECS 部署中,任务定义更新和目标组切换由 AppSpec 管理。Azure DevOps 的发布管道也提供类似的部署自动化,但 CodeDeploy 与 AWS 计算服务原生集成是其优势。

蓝绿部署与金丝雀发布实践

CodeDeploy 的蓝绿部署策略是启动新版本(绿色)实例组,健康检查通过后切换负载均衡器流量。EC2 场景下,使用 Auto Scaling 组自动预置新实例,切换完成后保留旧实例(蓝色)一段时间再终止。在此保留期间如需回滚,只需将流量切回蓝色即可立即恢复。Lambda 和 ECS 部署中,金丝雀发布特别有效。例如 Canary10Percent5Minutes 在前 5 分钟仅将 10% 流量导向新版本,无问题后再切换剩余 90%。部署策略相关书籍(Amazon)通过实例详细讲解了蓝绿与金丝雀的使用场景。配合 CloudWatch 告警设置自动回滚,可在检测到错误率或延迟超阈值时自动回退部署。

CodePipeline 集成与 CI/CD 流水线中的定位

CodeDeploy 可单独使用,但与 CodePipeline 组合可构建从代码提交到构建、测试、部署的完整 CI/CD 流水线。典型配置是以 CodeCommit 或 GitHub 推送为触发,CodeBuild 执行构建和测试,成功的制品通过 CodeDeploy 部署到预发布环境,经手动审批后部署到生产环境。部署组概念允许管理同一应用的多个环境(dev、staging、production),每个环境可设置不同的部署策略和告警配置。EC2 实例部署需要在每个实例上安装 CodeDeploy 代理,可使用 Systems Manager 的 State Manager 自动化代理的安装和更新。部署历史和日志记录在 CloudTrail 和 CloudWatch Logs 中,可用于故障排查。CodeDeploy 本身对 EC2/本地部署免费,仅 Lambda 和 ECS 部署按量计费。

共有するXB!