

# OPS 6  您如何缓解部署风险？
<a name="w2aac19b5b7b9"></a>

 采用提供快速质量反馈，并且若更改没有达到目标成效，则支持快速恢复的方法。使用这些实践可以减轻因部署更改而产生的问题的影响。 

**Topics**
+ [OPS06-BP01 针对不成功的更改制定计划](ops_mit_deploy_risks_plan_for_unsucessful_changes.md)
+ [OPS05-BP02 测试并验证变更](ops_mit_deploy_risks_test_val_chg.md)
+ [OPS06-BP03 使用部署管理系统](ops_mit_deploy_risks_deploy_mgmt_sys.md)
+ [OPS06-BP04 使用有限部署进行测试](ops_mit_deploy_risks_test_limited_deploy.md)
+ [OPS06-BP05 使用并行环境进行部署](ops_mit_deploy_risks_deploy_to_parallel_env.md)
+ [OPS06-BP06 部署频繁、小规模、可逆的更改](ops_mit_deploy_risks_freq_sm_rev_chg.md)
+ [OPS06-BP07 完全自动化集成和部署](ops_mit_deploy_risks_auto_integ_deploy.md)
+ [OPS06-BP08 自动测试和回滚](ops_mit_deploy_risks_auto_testing_and_rollback.md)

# OPS06-BP01 针对不成功的更改制定计划
<a name="ops_mit_deploy_risks_plan_for_unsucessful_changes"></a>

 制定计划，以便在变更没有达到目标成效时在生产环境中恢复到已知良好状态，或者进行修复。做好充分的准备，以备快速响应，最大限度缩短回滚时间。 

 **常见反模式：** 
+  您执行部署以后应用程序变得不稳定，但是系统上似乎还有活动用户。您必须决定是回滚更改并影响活动用户，还是等到知道用户无论如何都可能受到影响后再回滚更改。 
+  更改路由后，可以访问新环境，但是其中一个子网无法访问。您必须决定是回滚所有内容还是尝试修复无法访问的子网。在您做决定时，子网仍然无法访问。 

 **建立此最佳实践的好处：** 实施计划来缩短不成功更改的平均修复时间（MTTR，Mean Time To Recover），减少对最终用户的影响。 

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

## 实施指导
<a name="implementation-guidance"></a>
+  针对不成功的更改制定计划：制定计划，以便在更改没有实现所需成果时在生产环境中恢复到已知良好状态（即回滚更改），或者进行修复（即前滚更改）。如果发现在失败后无法回滚的更改，请在提交更改之前做好准备。 

# OPS05-BP02 测试并验证变更
<a name="ops_mit_deploy_risks_test_val_chg"></a>

 在所有生命周期阶段测试更改并验证结果，以便确认新功能并尽可能减少部署失败的风险和影响。 

 在 AWS 上，您可以创建临时并行环境，以降低试验和测试的风险、工作量及成本。使用 [AWS CloudFormation](https://aws.amazon.com/cloudformation/) 自动部署这些环境，以确保以一致的方式实施您的临时环境。 

 **常见反模式：** 
+  您在应用程序中部署了一个很酷的新功能，它无法运行，而您却不知道。 
+  您更新了证书。您不小心将证书安装到了错误的组件上。而您却不知道。 

 **建立此最佳实践的好处：** 在部署后对更改进行测试和验证，您可以及早发现问题，从而有机会减轻对客户的影响。 

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

## 实施指导
<a name="implementation-guidance"></a>
+  测试并验证更改：在所有生命周期阶段（例如开发、测试和生产）测试更改并验证结果，以便确认新功能并尽可能减少部署失败的风险和影响。 
  +  [AWS Cloud9](https://aws.amazon.com/cloud9/) 
  +  [什么是 AWS Cloud9？](https://docs.aws.amazon.com/cloud9/latest/user-guide/welcome.html) 
  +  [如何在发送代码之前在本地测试和调试 AWS CodeDeploy](https://aws.amazon.com/blogs/devops/how-to-test-and-debug-aws-codedeploy-locally-before-you-ship-your-code/) 

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

 **相关文档：** 
+  [AWS Cloud9](https://aws.amazon.com/cloud9/) 
+  [AWS 开发人员工具](https://aws.amazon.com/products/developer-tools/) 
+  [如何在发送代码之前在本地测试和调试 AWS CodeDeploy](https://aws.amazon.com/blogs/devops/how-to-test-and-debug-aws-codedeploy-locally-before-you-ship-your-code/) 
+  [什么是 AWS Cloud9？](https://docs.aws.amazon.com/cloud9/latest/user-guide/welcome.html) 

# OPS06-BP03 使用部署管理系统
<a name="ops_mit_deploy_risks_deploy_mgmt_sys"></a>

 使用部署管理系统来跟踪并实施更改。这可以减少手动过程引起的错误，并减少部署更改的工作量。 

 在 AWS 中，您可以使用像 [AWS 开发人员工具](https://aws.amazon.com/products/developer-tools/) （例如，AWS CodeCommit、 [AWS CodeBuild](https://aws.amazon.com/codebuild/)， [AWS CodePipeline](https://aws.amazon.com/codepipeline/)， [AWS CodeDeploy](https://aws.amazon.com/codedeploy/)和 [AWS CodeStar](https://aws.amazon.com/codestar/)）这样的服务来构建持续集成/持续部署（CI/CD）管道。 

 **常见反模式：** 
+  您手动将更新部署到整个队列中的应用程序服务器，由于更新错误，许多服务器变得没有响应。 
+  手动部署到应用程序服务器队列需要花费很长时间。在更改过程中，如果版本不一致会导致意外行为发生。 

 **建立此最佳实践的好处：** 采用部署管理系统可以减少部署更改的工作量，还可以降低手动程序导致错误的频率。 

 **未建立此最佳实践暴露的风险等级：** 中 

## 实施指导
<a name="implementation-guidance"></a>
+  使用部署管理系统：使用部署管理系统来跟踪并实施更改。这可以减少手动过程引起的错误，并减少部署更改的工作量。将集成和部署管道自动化，从代码签入到测试、部署和验证都包含在内。这可以减少准备时间、提高更改频率，并进一步减少工作量。 
  +  [AWS CodeDeploy 简介 – 使用 Amazon Web Services 自动完成软件部署](https://www.youtube.com/watch?v=Wx-ain8UryM) 
  +  [什么是 AWS CodeDeploy？](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) 
  +  [什么是 AWS Elastic Beanstalk？](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/Welcome.html) 
  +  [什么是 Amazon API Gateway？](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) 

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

 **相关文档：** 
+  [AWS CodeDeploy 用户指南](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) 
+  [AWS 开发人员工具](https://aws.amazon.com/products/developer-tools/) 
+  [在 AWS CodeDeploy 中尝试示例蓝绿部署](https://docs.aws.amazon.com/codedeploy/latest/userguide/applications-create-blue-green.html) 
+  [什么是 AWS CodeDeploy？](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) 
+  [什么是 AWS Elastic Beanstalk？](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/Welcome.html) 
+  [什么是 Amazon API Gateway？](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) 

 **相关视频：** 
+  [使用 AWS 深入了解高级持续交付技术](https://www.youtube.com/watch?v=Lrrgd0Kemhw) 
+  [AWS CodeDeploy 简介 – 使用 Amazon Web Services 自动完成软件部署](https://www.youtube.com/watch?v=Wx-ain8UryM) 

# OPS06-BP04 使用有限部署进行测试
<a name="ops_mit_deploy_risks_test_limited_deploy"></a>

 与现有系统一起进行有限部署测试，以在全面部署前确认预期结果。例如使用 Canary 部署测试或一体化部署。 

 **常见反模式：** 
+  您一次性将不成功的更改部署到所有生产环境中。而您却不知道。 

 **建立此最佳实践的好处：** 通过在完成有限部署后对更改进行测试和验证，您可以及早发现问题，从而有机会进一步减轻对客户的影响，将对客户的影响降至最低。 

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

## 实施指导
<a name="implementation-guidance"></a>
+  使用有限部署进行测试：在全面部署之前使用有限的部署和现有系统进行测试，以确认实现所需成果。例如使用 Canary 部署测试或一体化部署。 
  +  [AWS CodeDeploy 用户指南](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) 
  +  [使用 AWS Elastic Beanstalk 进行蓝/绿部署](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html) 
  +  [设置 API Gateway 金丝雀发布部署](https://docs.aws.amazon.com/apigateway/latest/developerguide/canary-release.html) 
  +  [在 AWS CodeDeploy 中尝试示例蓝绿部署](https://docs.aws.amazon.com/codedeploy/latest/userguide/applications-create-blue-green.html) 
  +  [在 AWS CodeDeploy 中使用部署配置](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html) 

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

 **相关文档：** 
+  [AWS CodeDeploy 用户指南](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) 
+  [使用 AWS Elastic Beanstalk 进行蓝/绿部署](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html) 
+  [设置 API Gateway 金丝雀发布部署](https://docs.aws.amazon.com/apigateway/latest/developerguide/canary-release.html) 
+  [在 AWS CodeDeploy 中尝试示例蓝绿部署](https://docs.aws.amazon.com/codedeploy/latest/userguide/applications-create-blue-green.html) 
+  [在 AWS CodeDeploy 中使用部署配置](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html) 

# OPS06-BP05 使用并行环境进行部署
<a name="ops_mit_deploy_risks_deploy_to_parallel_env"></a>

 在并行环境中实施变更，然后过渡到新环境。保留之前的环境，直到确认部署成功为止。这样可以支持回滚到以前的环境，从而尽可能缩短恢复时间。 

 **常见反模式：** 
+  您通过修改现有系统来执行可变部署。发现更改不成功后，您被迫再次修改系统以还原旧版本，从而导致恢复时间延长。 
+  在维护时段内，您停用旧环境，然后开始构建新环境。在这一过程进行了许多时间后，您发现部署中出现了无法恢复的问题。虽然非常疲惫，您还是不得不找回以前的部署过程，并开始重新构建旧环境。 

 **建立此最佳实践的好处：** 使用并行环境后，您可以预先部署新环境并在需要时过渡到新环境。如果新环境不成功，则可以转换回原始环境，完成快速恢复。 

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

## 实施指导
<a name="implementation-guidance"></a>
+  使用并行环境进行部署：对并行环境实施更改，然后过渡或切换到新环境。保留之前的环境，直到确认部署成功为止。这样可以支持回滚到以前的环境，从而尽可能缩短恢复时间。例如在不可变基础设施中采用蓝/绿部署。 
  +  [在 AWS CodeDeploy 中使用部署配置](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html) 
  +  [使用 AWS Elastic Beanstalk 进行蓝/绿部署](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html) 
  +  [设置 API Gateway 金丝雀发布部署](https://docs.aws.amazon.com/apigateway/latest/developerguide/canary-release.html) 
  +  [在 AWS CodeDeploy 中尝试示例蓝绿部署](https://docs.aws.amazon.com/codedeploy/latest/userguide/applications-create-blue-green.html) 

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

 **相关文档：** 
+  [AWS CodeDeploy 用户指南](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) 
+  [使用 AWS Elastic Beanstalk 进行蓝/绿部署](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html) 
+  [设置 API Gateway 金丝雀发布部署](https://docs.aws.amazon.com/apigateway/latest/developerguide/canary-release.html) 
+  [在 AWS CodeDeploy 中尝试示例蓝绿部署](https://docs.aws.amazon.com/codedeploy/latest/userguide/applications-create-blue-green.html) 
+  [在 AWS CodeDeploy 中使用部署配置](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html) 

 **相关视频：** 
+  [使用 AWS 深入了解高级持续交付技术](https://www.youtube.com/watch?v=Lrrgd0Kemhw) 

# OPS06-BP06 部署频繁、小规模、可逆的更改
<a name="ops_mit_deploy_risks_freq_sm_rev_chg"></a>

 频繁进行可逆的小规模更改可以缩小变更的范围。这样可以简化故障排除工作、加快修复速度，并支持回滚更改。 

 **常见反模式：** 
+  您每季度都部署新版应用程序。 
+  您经常更改数据库架构。 
+  您执行手动就地更新，覆盖现有安装和配置。 

 **建立此最佳实践的好处：** 频繁部署小的更改可让您更快地发现开发工作带来的效益。更改很小时，更易于确定是否会带来意外后果。更改可逆时，由于简化了恢复，因此实施更改的风险更小。 

 **未建立此最佳实践暴露的风险等级：** 低 

## 实施指导
<a name="implementation-guidance"></a>
+  部署频繁、小规模、可逆的更改：频繁进行可逆的小规模更改可以缩小更改影响的范围。这样可以简化故障排除工作、加快修复速度，并支持回滚更改。 

# OPS06-BP07 完全自动化集成和部署
<a name="ops_mit_deploy_risks_auto_integ_deploy"></a>

 实现自动构建、部署和测试工作负载。这可以减少手动过程引起的错误，并减少部署更改的工作量。 

 使用 [资源标签](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html) 和 [AWS Resource Groups](https://docs.aws.amazon.com/ARG/latest/APIReference/Welcome.html) ，按照一致的 [标记策略](https://aws.amazon.com/answers/account-management/aws-tagging-strategies/) 应用元数据，以标识您的资源。标记您的资源，以便进行整理、成本核算、访问控制并有针对性地自动执行操作活动。 

 **常见反模式：** 
+  星期五，您完成为分支功能编写新代码的工作。星期一，在运行代码质量测试脚本和各单元测试脚本后，您将代码签入计划发行的下一版本中。 
+  您接到任务，需要为重要问题编写修复代码，该问题在生产中影响了大量客户。对修复代码进行测试后，您提交代码并通过电子邮件发送更改管理，请求批准以将其部署到生产环境中。 

 **建立此最佳实践的好处：** 通过自动构建和部署管理系统，可以减少由手动流程引发的错误，并减少部署更改的工作量，使您的团队成员能够专注于实现商业价值。 

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

## 实施指导
<a name="implementation-guidance"></a>
+  使用构建和部署管理系统：使用构建和部署管理系统来跟踪并实施更改，以便减少手动过程引起的错误，并减少工作量。将集成和部署管道完全自动化，从代码签入到构建、测试、部署和验证都包含在内。这可以减少准备时间、提高更改频率，并减少工作量。 
  +  [什么是 AWS CodeBuild？](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) 
  +  [面向软件开发的持续集成最佳实践](https://www.youtube.com/watch?v=GEPJ7Lo346A) 
  +  [Slalom：AWS 上面向无服务器应用程序的 CI/CD](https://www.youtube.com/watch?v=tEpx5VaW4WE) 
  +  [AWS CodeDeploy 简介 – 使用 Amazon Web Services 自动完成软件部署](https://www.youtube.com/watch?v=Wx-ain8UryM) 
  +  [什么是 AWS CodeDeploy？](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) 
  +  [使用 AWS 深入了解高级持续交付技术](https://www.youtube.com/watch?v=Lrrgd0Kemhw) 

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

 **相关文档：** 
+  [在 AWS CodeDeploy 中尝试示例蓝绿部署](https://docs.aws.amazon.com/codedeploy/latest/userguide/applications-create-blue-green.html) 
+  [什么是 AWS CodeBuild？](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) 
+  [什么是 AWS CodeDeploy？](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) 

 **相关视频：** 
+  [面向软件开发的持续集成最佳实践](https://www.youtube.com/watch?v=GEPJ7Lo346A) 
+  [使用 AWS 深入了解高级持续交付技术](https://www.youtube.com/watch?v=Lrrgd0Kemhw) 
+  [AWS CodeDeploy 简介 – 使用 Amazon Web Services 自动完成软件部署](https://www.youtube.com/watch?v=Wx-ain8UryM) 
+  [Slalom：AWS 上面向无服务器应用程序的 CI/CD](https://www.youtube.com/watch?v=tEpx5VaW4WE) 

# OPS06-BP08 自动测试和回滚
<a name="ops_mit_deploy_risks_auto_testing_and_rollback"></a>

 自动测试部署的环境以便确认目标效果。在没有达到预期结果时，自动回滚到之前的已知良好状态，尽可能地缩短恢复时间，并减少手动过程引起的错误。 

 **常见反模式：** 
+  您为工作负载部署更改。您看到更改完成后，开始进行部署后测试。完成测试之后，您发现工作负载不可操作，而且客户断开了连接。然后，您开始回滚到之前的版本。经过较长时间检测，发现问题之后，通过手动重新部署会延长恢复时间。 

 **建立此最佳实践的好处：** 在部署之后对更改进行测试和验证，可以让您立即发现问题。自动回滚到以前的版本，可以将对客户的影响降至最低。 

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

## 实施指导
<a name="implementation-guidance"></a>
+  自动测试和回滚：自动测试部署的环境以确认达成所需效果。在没有达到预期结果时，自动回滚到之前的已知良好状态，尽可能地缩短恢复时间，并减少手动过程引起的错误。例如，在部署之后执行详细的综合用户事务、验证结果，并在失败时回滚。 
  +  [使用 AWS CodeDeploy 重新部署和回滚部署](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployments-rollback-and-redeploy.html) 

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

 **相关文档：** 
+  [使用 AWS CodeDeploy 重新部署和回滚部署](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployments-rollback-and-redeploy.html) 