

# OPS06-BP03 采用安全部署策略
<a name="ops_mit_deploy_risks_deploy_mgmt_sys"></a>

 在安全的生产环境滚动部署中，会对有益更改的流程进行控制，目标是尽可能减少这些更改让客户感知到的任何影响。安全控制措施提供检查机制，用于验证是否达成所期望的结果，并针对由于更改或部署失败所引入的任何缺陷，限制这些缺陷的影响范围。安全滚动部署可包括功能标记、单盒、滚动（金丝雀版本）、不可变、流量分割和蓝绿部署等策略。 

 **期望的结果：** 您的企业使用持续集成/持续交付（CI/CD，Continuous Integration/Continuous Delivery）系统，提供自动进行安全滚动部署的功能。团队必须使用适当的安全滚动部署策略。 

 **常见反模式：** 
+  您将不成功的更改一次性部署到所有生产环境中。因此，所有客户同时受到影响。 
+  在同时部署到所有系统时，引入的一个缺陷需要紧急进行修复。为所有客户修复该缺陷需要几天时间。 
+  管理生产版本发布需要多个团队的规划和参与。这限制了您为客户更新功能的频率。 
+  您通过修改现有系统来执行可变部署。发现更改不成功后，您被迫再次修改系统，还原旧版本，导致恢复时间延长。 

 **建立此最佳实践的好处：** 自动化的部署，在快速滚动部署与持续向客户提供有益更改之间取得平衡。限制影响范围可以防止代价高昂的部署失败，并最大限度地提高团队有效应对失败的能力。 

 **未建立这种最佳实践的情况下暴露的风险等级：** 中 

## 实施指导
<a name="implementation-guidance"></a>

 持续交付失败会导致服务可用性降低，带来糟糕的客户体验。为了最大限度地提高部署成功率，请在端到端发布流程中实施安全控制措施，以最大限度地减少部署错误，将达成零部署失败作为目标。 

 **客户示例** 

 AnyCompany Retail 的目标是尽可能减少部署的停机时间，甚至实现零停机，这意味着在部署期间，用户不会感觉到任何影响。为了实现这一目标，公司建立了部署模式（参见以下工作流程图），例如滚动部署和蓝绿部署。所有团队在各自的 CI/CD 管道中都采用了其中一种或多种模式。 


| Amazon EC2 的 CodeDeploy 工作流程  | Amazon ECS 的 CodeDeploy 工作流程  | Lambda 的 CodeDeploy 工作流程  | 
| --- | --- | --- | 
|  ![Amazon EC2 的部署流程](http://docs.aws.amazon.com/zh_cn/wellarchitected/2023-10-03/framework/images/deployment-process-ec2.png)  |  ![Amazon ECS 的部署流程](http://docs.aws.amazon.com/zh_cn/wellarchitected/2023-10-03/framework/images/deployment-process-ecs.png)  |  ![Lambda 的部署流程](http://docs.aws.amazon.com/zh_cn/wellarchitected/2023-10-03/framework/images/deployment-process-lambda.png)  | 

### 实施步骤
<a name="implementation-steps"></a>

1.  使用审批工作流程在提升到生产版本后，启动生产版本滚动部署步骤序列。 

1.  使用自动化部署系统，例如 [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)。AWS CodeDeploy [部署选项](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-steps.html) 包括 EC2/本地就地部署及 EC2/本地蓝绿部署、AWS Lambda 和 Amazon ECS（参见前面的工作流程图）。 

   1.  在适用的情况下，[可将 AWS CodeDeploy 与其他 AWS 服务集成](https://docs.aws.amazon.com/codedeploy/latest/userguide/integrations-aws.html) 或 [将 AWS CodeDeploy 与合作伙伴的产品和服务集成](https://docs.aws.amazon.com/codedeploy/latest/userguide/integrations-partners.html)。 

1.  对于 [Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) 和 [Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) 等数据库，使用蓝绿部署。 

1.  [监控部署 - ](https://docs.aws.amazon.com/codedeploy/latest/userguide/monitoring.html) 使用 Amazon CloudWatch、AWS CloudTrail 和 Amazon SNS 事件通知。 

1.  执行部署后的自动化测试，包括功能测试、安全测试、回归测试、集成测试以及任何负载测试。 

1.  [排查](https://docs.aws.amazon.com/codedeploy/latest/userguide/troubleshooting.html) 部署问题。 

 **实施计划的工作量级别：** 中 

## 资源
<a name="resources"></a>

 **相关最佳实践：** 
+  [OPS05-BP02 测试并验证变更](ops_dev_integ_test_val_chg.md) 
+  [OPS05-BP09 频繁进行可逆的小规模更改](ops_dev_integ_freq_sm_rev_chg.md) 
+  [OPS05-BP10 完全自动化集成和部署](ops_dev_integ_auto_integ_deploy.md) 

 **相关文档：** 
+ [AWS Builders Library \| Automating safe, hands-off deployments \| Production deployments ](https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments/?did=ba_card&trk=ba_card#Production_deployments)
+ [AWS Builders Library \| My CI/CD pipeline is my release captain \| Safe, automatic production releases](https://aws.amazon.com//builders-library/cicd-pipeline/#Safe.2C_automatic_production_releases)
+ [AWS 白皮书 \| Practicing Continuous Integration and Continuous Delivery on AWS \| Deployment methods](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/deployment-methods.html)
+ [AWS CodeDeploy User Guide](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)
+ [Working with deployment configurations in AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html)
+ [Set up an API Gateway canary release deployment ](https://docs.aws.amazon.com/apigateway/latest/developerguide/canary-release.html)
+ [Amazon ECS Deployment Types](https://docs.aws.amazon.com/)
+ [Fully Managed Blue/Green Deployments in Amazon Aurora and Amazon RDS](https://aws.amazon.com/blogs/aws/new-fully-managed-blue-green-deployments-in-amazon-aurora-and-amazon-rds/)
+ [Blue/Green deployments with AWS Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html)

 **相关视频：** 
+ [re:Invent 2020 \| Hands-off: Automating continuous delivery pipelines at Amazon](https://www.youtube.com/watch?v=ngnMj1zbMPY)
+ [re:Invent 2019 \| Amazon's Approach to high-availability deployment](https://www.youtube.com/watch?v=bCgD2bX1LI4)

 **相关示例：** 
+ [Try a Sample Blue/Green Deployment in AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/applications-create-blue-green.html)
+ [研讨会 \| Buiding CI/CD pipelines for Lambda canary deployments using AWS CDK](https://catalog.us-east-1.prod.workshops.aws/workshops/5195ab7c-5ded-4ee2-a1c5-775300717f42/en-US)
+ [研讨会 \| Blue/Green and Canary Deployment for EKS and ECS](https://catalog.us-east-1.prod.workshops.aws/workshops/2175d94a-cd79-4ed2-8e7e-1f0dd1956a3a/en-US)
+ [研讨会 \| Building a Cross-account CI/CD Pipeline](https://catalog.us-east-1.prod.workshops.aws/workshops/00bc829e-fd7c-4204-9da1-faea3cf8bd88/en-US)