如何调整AWS CodePipeline适配CloudFront分阶段部署工作流?
CloudFront持续部署结合CodePipeline实现混合发布流程
一、前期CloudFront配置
- 保留现有生产CloudFront分发(关联你的S3存储桶),新建一个预发分发:
- 预发分发的源、缓存策略、SSL配置、WAF规则完全复刻生产分发,确保测试环境与生产一致;可选配置一个测试域名(如
pre.yourdomain.com)用于内部验证
- 预发分发的源、缓存策略、SSL配置、WAF规则完全复刻生产分发,确保测试环境与生产一致;可选配置一个测试域名(如
- 在生产分发的「持续部署」面板,将预发分发设为候选分发,初始流量分配设为
0%(日常状态下所有流量走生产分发) - 开启自动回滚(推荐):设置错误率阈值(如5%),当预发分发的错误率超标时自动切回100%生产流量
二、CodePipeline流程改造
不需要改动现有构建→部署到S3的核心链路,仅新增一个手动审批分支来区分日常/重大更新:
- 保留原有默认流程:构建完成后自动部署到S3,紧接着执行
aws cloudfront create-invalidation命令触发生产分发缓存失效——这是日常发布的默认路径,和你原来的逻辑完全一致 - 添加手动审批环节:在构建阶段之后、部署到S3之前,插入一个手动审批动作。当判断为重大更新时,审批通过后触发额外动作:
- 调用
aws cloudfront update-continuous-deployment-policy将预发分发的流量比例调整为初始测试值(如10%) - 可选:通过SNS发送团队通知,告知已启动灰度发布
- 调用
三、日常发布操作
- 提交代码到指定分支,CodePipeline自动执行构建→部署S3→生产分发缓存失效
- 此时持续部署策略的流量分配仍为0%,所有用户访问的是生产分发拉取的最新S3内容,完全沿用原有发布逻辑
四、重大更新操作步骤
- 代码提交后,在CodePipeline的手动审批环节标记为「重大更新」并通过
- 登录AWS控制台,进入生产CloudFront分发的「持续部署」面板,手动调整流量比例:
- 先分配10%流量到预发分发,监控CloudWatch的错误率、请求延迟等指标
- 验证无问题后,逐步提升流量至50%、100%
- 确认新内容稳定后,恢复默认配置:
- 触发生产分发的缓存失效,确保生产分发拉取最新S3内容
- 将持续部署策略的流量分配调回0%,或直接移除候选分发
- 可选:暂停/删除预发分发,待下次重大更新前再重新配置
五、关键注意事项
- 预发与生产分发的配置必须完全对齐,避免因缓存策略、WAF规则差异导致的测试失真
- 重大更新期间,预发分发会自动拉取S3新内容(只要缓存策略设置正确),无需额外触发失效
- 若需要更自动化的灰度节奏,可通过Lambda+CloudWatch Events实现按时间梯度调整流量,但手动操作更适合重大更新的风险控制
内容的提问来源于stack exchange,提问作者Salvatore Iovene
相关产品推荐
相关产品推荐

