OPS06-BP03 采用安全部署策略
在安全的生产环境滚动部署中,会对有益更改的流程进行控制,目标是尽可能减少这些更改让客户感知到的任何影响。安全控制措施提供检查机制,用于验证是否达成期望结果,并针对由于更改或部署失败所引入的任何缺陷,限制这些缺陷的影响范围。安全滚动部署可包括功能标记、单盒、滚动(金丝雀版本)、不可变、流量分割和蓝绿部署等策略。
期望结果:组织使用持续集成/持续交付(CI/CD)系统,提供自动进行安全滚动部署的功能。团队必须使用适当的安全滚动部署策略。
常见反模式:
-
将不成功的更改一次性部署到所有生产环境中。因此,所有客户同时受到影响。
-
在同时部署到所有系统时,引入的缺陷需要紧急进行修复。为所有客户修复该缺陷需要几天时间。
-
管理生产版本发布需要多个团队的规划和参与。这限制了为客户更新功能的频率。
-
通过修改现有系统来执行可变部署。发现更改不成功后,被迫再次修改系统,还原旧版本,导致恢复时间延长。
建立此最佳实践的好处:自动化的部署,在快速滚动部署与持续向客户提供有益更改之间取得平衡。限制影响范围可以防止代价高昂的部署失败,并最大限度地提高团队有效应对失败的能力。
在未建立这种最佳实践的情况下暴露的风险等级:中
实施指导
持续交付失败会导致服务可用性降低,带来糟糕的客户体验。为了最大限度地提高部署成功率,请在端到端发布流程中实施安全控制措施,以便最大限度地减少部署错误,以达成零部署失败为目标。
客户示例
AnyCompany Retail 的目标是尽可能减少部署的停机时间,甚至实现零停机,这意味着在部署期间,不会对用户造成任何可察觉影响。为了实现这一目标,公司建立了部署模式(参阅以下工作流程图),例如滚动部署和蓝绿部署。所有团队在各自的 CI/CD 管道中都采用了其中一种或多种模式。
适用于 Amazon EC2 的 CodeDeploy 工作流程 | 适用于 Amazon ECS 的 CodeDeploy 工作流程 | 适用于 Lambda 的 CodeDeploy 工作流程 |
---|---|---|
![]() |
![]() |
![]() |
实施步骤
-
使用审批工作流程在提升到生产版本后,启动生产版本滚动部署步骤序列。
-
使用 AWS CodeDeploy 等自动化部署系统。AWS CodeDeploy 部署选项包括 EC2/本地就地部署及 EC2/本地蓝绿部署、AWS Lambda 和 Amazon ECS(参阅前面的工作流程图)。
-
对诸如 Amazon Aurora 和 Amazon RDS 之类的数据库使用蓝/绿部署。
-
使用 Amazon CloudWatch、AWS CloudTrail 和 Amazon Simple Notification Service(Amazon SNS)监控部署。
-
执行部署后的自动化测试,包括功能测试、安全测试、回归测试、集成测试以及任何负载测试。
-
部署问题疑难解答。
实施计划的工作量级别:中
资源
相关最佳实践:
相关文档:
相关视频:
相关示例:
-
Workshop | Building CI/CD pipelines for Lambda canary deployments using AWS CDK
-
Workshop | Building your first DevOps Blue/Green pipeline with Amazon ECS
-
Workshop | Building your first DevOps Blue/Green pipeline with Amazon EKS
-
Implementing cross-account CI/CD with AWS SAM for container-based Lambda functions