

# OPS 5. 如何减少缺陷、简化修复和改进生产流程？
<a name="ops-05"></a>

 采用的方法需能够改进将更改应用于生产环境的流程，激活重构、快速质量反馈和错误修复。这些方法可以加快有益更改进入生产环境的速度、减少产生的问题，并能够快速识别和修复通过部署活动引入的问题。

**Topics**
+ [

# OPS05-BP01 使用版本控制
](ops_dev_integ_version_control.md)
+ [

# OPS05-BP02 测试并验证更改
](ops_dev_integ_test_val_chg.md)
+ [

# OPS05-BP03 使用配置管理系统
](ops_dev_integ_conf_mgmt_sys.md)
+ [

# OPS05-BP04 使用构建和部署管理系统
](ops_dev_integ_build_mgmt_sys.md)
+ [

# OPS05-BP05 执行补丁管理
](ops_dev_integ_patch_mgmt.md)
+ [

# OPS05-BP06 共享设计标准
](ops_dev_integ_share_design_stds.md)
+ [

# OPS05-BP07 实施提高代码质量的实践
](ops_dev_integ_code_quality.md)
+ [

# OPS05-BP08 使用多个环境
](ops_dev_integ_multi_env.md)
+ [

# OPS05-BP09 频繁进行可逆的小规模更改
](ops_dev_integ_freq_sm_rev_chg.md)
+ [

# OPS05-BP10 完全自动化集成和部署
](ops_dev_integ_auto_integ_deploy.md)

# OPS05-BP01 使用版本控制
<a name="ops_dev_integ_version_control"></a>

 使用版本控制来跟踪更改和发布。

 许多 AWS 服务都提供版本控制功能。使用 [Git](https://aws.amazon.com/devops/source-control/git/) 等修订或[源代码控制](https://aws.amazon.com/devops/source-control/)系统来管理代码和其它构件，例如基础设施的版本受控的 [AWS CloudFormation](https://aws.amazon.com/cloudformation/) 模板。

 **期望结果：**团队协作编写代码。合并后，代码将保持一致，并且不会丢失任何更改。通过正确的版本控制，可以很容易纠正错误。

 **常见反模式：**
+  您一直在工作站上开发和存储代码。工作站上发生了不可恢复的存储故障，代码丢失了。
+  用更改内容覆盖现有代码后，重新启动应用程序，但其无法运行。您无法撤销所做更改。
+  您对报告文件执行了写入锁定，而其他人需要对此文件进行编辑。他们与您联系要求停止写入锁定，以便他们可以完成自己的任务。
+  研究团队一直在进行详细的分析，以便对未来的工作进行规划。有人不小心把购物单保存在最终报告上了。您无法撤销更改，不得不重新创建报告。

 **建立此最佳实践的好处：**借助版本控制功能，可以轻松地恢复到已知的良好状态和以前的版本，并降低资产丢失的风险。

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

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

 在版本受控的存储库中维护资产。这让您能够跟踪更改、部署新版本、检测对现有版本的更改，以及恢复到以前的版本（例如在发生故障时回滚到已知的良好状态）。将配置管理系统的版本控制功能集成到程序中。

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

 **相关最佳实践：**
+  [OPS05-BP04 使用构建和部署管理系统](ops_dev_integ_build_mgmt_sys.md) 

 **相关视频：**
+ [AWS re:Invent 2023 - How Lockheed Martin builds software faster, powered by DevSecOps ](https://www.youtube.com/watch?v=Q1OSyxYkl5w)
+ [AWS re:Invent 2023 - How GitHub operationalizes AI for team collaboration and productivity ](https://www.youtube.com/watch?v=cOVvGaiusOI)

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

 部署的每一项更改都必须经过测试，避免在生产中出现错误。此最佳实践的重点是测试从版本控制到构件构建的更改。除应用程序代码更改外，测试还应该包括基础设施、配置、安全控制和操作程序。测试有多种形式，从单元测试到软件组件分析（SCA）等等。在软件集成和交付过程中，尽早进行测试可进一步确保构件质量。

 组织必须为所有的软件构件制定测试标准。自动化测试可以减少工作量，并避免人工测试的错误。但有些情况下，可能必须进行手动测试。开发人员必须能够访问自动化测试结果，以便创建反馈环路，提高软件质量。

 **期望结果：**软件更改在交付前经过测试。开发人员可以访问测试结果和验证结果。组织制定了适用于所有软件更改的测试标准。

 **常见反模式：**
+  在没有进行任何测试的情况下部署一项新软件更改。它无法在生产环境中运行，从而导致中断。
+  使用 AWS CloudFormation 部署新安全组，而没有在预生产环境中进行测试。这些安全组导致客户无法访问应用程序。
+  修改了一个方法，但没有进行单元测试。该软件在部署到生产环境中后无法运行。

 **建立此最佳实践的好处：**降低了软件部署更改的失败率。软件质量得到改进。开发人员提高了对其代码可行性的认识。可以放心地推出安全策略，支持组织实现合规性。可以提前测试自动扩缩策略更新等基础设施更改，从而满足流量需求。

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

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

 作为持续集成实践的一部分，对从应用程序代码到基础设施的所有更改都进行测试。将公布测试结果，以便开发人员快速提供反馈。组织制定了测试标准，所有更改都必须通过该标准。

 利用 Amazon Q 开发者版的生成式人工智能的强大功能，提高开发人员的生产力和代码质量。Amazon Q 开发者版包括生成代码建议（基于大型语言模型）、制作单元测试（包括边界条件），以及通过检测和修复安全漏洞来增强代码安全性。

 **客户示例** 

 作为持续集成管道的一部分，AnyCompany Retail 对所有软件构件进行几种类型的测试。他们实行测试驱动型开发，因此所有软件都要进行单元测试。构件构建完毕后，他们会立即运行端到端测试。第一轮测试完成后，他们会运行静态应用程序安全扫描，寻找已知漏洞。在每个测试关口通过时，开发人员都会收到消息。所有测试均完成后，软件构件就会存储在构件库中。

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

1.  与组织中的利益相关方合作，为软件构件制定测试标准。所有构件均应通过哪些标准测试？ 测试范围内是否必须包含合规性或治理要求？ 是否需要进行代码质量测试？ 测试完成后，需要通知谁？ 

   1.  [AWS 部署管道参考架构](https://pipelines.devops.aws.dev/)包含一个权威的测试类型列表，可作为集成管道的一部分对软件构件执行这些测试。

1.  根据软件测试标准，利用必要的测试来检测应用程序。每组测试应在 10 分钟内完成。测试应该作为集成管道的一部分运行。

   1.  使用 [Amazon Q 开发者版](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html)，这是一款生成式人工智能工具，可以帮助创建单元测试案例（包括边界条件）、使用代码和注释生成函数以及实现已知算法。

   1.  使用 [Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html) 来测试应用程序代码是否存在缺陷。

   1.  使用 [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) 对软件构件执行测试。

   1.  [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) 可以将软件测试编排到管道中。

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

 **相关最佳实践：**
+  [OPS05-BP01 使用版本控制](https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_dev_integ_version_control.html) 
+  [OPS05-BP06 共享设计标准](https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_dev_integ_share_design_stds.html) 
+  [OPS05-BP07 实施提高代码质量的实践](https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_dev_integ_code_quality.html) 
+  [OPS05-BP10 完全自动化集成和部署](https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_dev_integ_auto_integ_deploy.html) 

 **相关文档：**
+  [采用测试驱动型开发方法](https://docs.aws.amazon.com/prescriptive-guidance/latest/best-practices-cdk-typescript-iac/development-best-practices.html) 
+  [Accelerate your Software Development Lifecycle with Amazon Q](https://aws.amazon.com/blogs/devops/accelerate-your-software-development-lifecycle-with-amazon-q/) 
+  [Amazon Q Developer, now generally available, includes previews of new capabilities to reimagine developer experience](https://aws.amazon.com/blogs/aws/amazon-q-developer-now-generally-available-includes-new-capabilities-to-reimagine-developer-experience/) 
+  [The Ultimate Cheat Sheet for Using Amazon Q Developer in Your IDE](https://community.aws/content/2eYoqeFRqaVnk900emsknDfzhfW/the-ultimate-cheat-sheet-for-using-amazon-q-developer-in-your-ide) 
+  [Shift-Left Workload, leveraging AI for Test Creation](https://community.aws/content/2gBZtC94gPzaCQRnt4P0rIYWuBx/shift-left-workload-leveraging-ai-for-test-creation) 
+  [Amazon Q 开发人员中心](https://aws.amazon.com/developer/generative-ai/amazon-q/) 
+  [10 ways to build applications faster with Amazon CodeWhisperer](https://aws.amazon.com/blogs/devops/10-ways-to-build-applications-faster-with-amazon-codewhisperer/) 
+  [Looking beyond code coverage with Amazon CodeWhisperer](https://aws.amazon.com/blogs/devops/looking-beyond-code-coverage-with-amazon-codewhisperer/) 
+  [Best Practices for Prompt Engineering with Amazon CodeWhisperer](https://aws.amazon.com/blogs/devops/best-practices-for-prompt-engineering-with-amazon-codewhisperer/) 
+  [Automated AWS CloudFormation Testing Pipeline with TaskCat and CodePipeline](https://aws.amazon.com/blogs/devops/automated-cloudformation-testing-pipeline-with-taskcat-and-codepipeline/) 
+  [Building end-to-end AWS DevSecOps CI/CD pipeline with open source SCA, SAST, and DAST tools](https://aws.amazon.com/blogs/devops/building-end-to-end-aws-devsecops-ci-cd-pipeline-with-open-source-sca-sast-and-dast-tools/) 
+  [Getting started with testing serverless applications](https://aws.amazon.com/blogs/compute/getting-started-with-testing-serverless-applications/) 
+  [My CI/CD pipeline is my release captain](https://aws.amazon.com/builders-library/cicd-pipeline/) 
+  《[在 AWS 上练习持续集成和持续交付白皮书](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html)》 

 **相关视频：**
+  [Implement an API with Amazon Q Developer Agent for Software Development](https://www.youtube.com/watch?v=U4XEvJUvff4) 
+  [Installing, Configuring, & Using Amazon Q Developer with JetBrains IDEs (How-to)](https://www.youtube.com/watch?v=-iQfIhTA4J0) 
+  [Mastering the art of Amazon CodeWhisperer - YouTube playlist](https://www.youtube.com/playlist?list=PLDqi6CuDzubxzL-yIqgQb9UbbceYdKhpK) 
+  [AWS re:Invent 2020: Testable infrastructure: Integration testing on AWS](https://www.youtube.com/watch?v=KJC380Juo2w) 
+  [AWS Summit ANZ 2021 - Driving a test-first strategy with CDK and test driven development](https://www.youtube.com/watch?v=1R7G_wcyd3s) 
+  [Testing Your Infrastructure as Code with AWS CDK](https://www.youtube.com/watch?v=fWtuwGSoSOU) 

 **相关资源：**
+  [AWS Deployment Pipeline Reference Architecture - Application](https://pipelines.devops.aws.dev/application-pipeline/index.html) 
+  [AWS Kubernetes DevSecOps 管道](https://github.com/aws-samples/devsecops-cicd-containers) 
+  [Run unit tests for a Node.js application from GitHub by using AWS CodeBuild](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/run-unit-tests-for-a-node-js-application-from-github-by-using-aws-codebuild.html) 
+  [Use Serverspec for test-driven development of infrastructure code](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/use-serverspec-for-test-driven-development-of-infrastructure-code.html) 

 **相关服务：**
+  [Amazon Q 开发者版](https://aws.amazon.com/q/developer/) 
+  [Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html) 
+  [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) 
+  [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) 

# OPS05-BP03 使用配置管理系统
<a name="ops_dev_integ_conf_mgmt_sys"></a>

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

静态配置管理在初始化资源时设置值，这些值预计在资源的生命周期内会保持一致。动态配置管理在初始化时设置值，这些值在资源的生命周期内可能或预计会发生变化。例如，可以设置功能切换，通过配置更改来激活代码中的功能，或者在意外事件发生期间更改日志详细信息级别。

配置应在已知且一致的状态下部署。应该使用自动化检查功能来持续监控跨环境和区域的资源配置。这些控制措施应定义为自动化代码和管理，从而确保在各个环境中始终如一地应用规则。配置更改应通过商定的更改控制程序进行更新，并一致地应用，从而遵守版本控制。应用程序配置应独立于应用程序和基础设施代码进行管理。这可实现在多个环境中进行一致的部署。配置更改不会导致重建或重新部署应用程序。

 **期望结果：**可以作为持续集成、持续交付（CI/CD）管道的一部分进行配置、验证和部署。通过监控来验证配置是否正确。这样可以最大限度地减少对终端用户和客户的任何影响。

 **常见反模式：**
+  手动更新整个实例集中的 Web 服务器配置，由于更新错误，许多服务器变得没有响应。
+  手动更新应用程序服务器实例集需要花费很长时间。在更改过程中，如果配置不一致会导致意外行为发生。
+  有人更新了安全组，Web 服务器变得无法访问。如果不知道进行了哪些更改，就需要花费大量时间来调查问题，导致恢复时间延长。
+  未经验证即通过 CI/CD 将预生产配置推送到生产环境中。让用户和客户接触到不正确的数据和服务。

 **建立此最佳实践的好处：**采用配置管理系统可以减少更改及对其进行跟踪的工作量，还可以降低手动程序导致错误的频率。配置管理系统为治理、合规性和监管要求提供了保障。

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

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

 配置管理系统用于跟踪和实施对应用程序和环境配置的更改。配置管理系统还用于减少手动流程导致的错误，让配置更改可重复且可审核，并减少工作量。

 在 AWS 上，可以使用 [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html) 持续监控[跨账户和区域](https://docs.aws.amazon.com/config/latest/developerguide/aggregate-data.html)的 AWS 资源配置。这有助于跟踪其配置历史记录，了解配置更改会如何影响其他资源，并使用 [AWS Config 规则](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html) 和 [AWS Config 合规包](https://docs.aws.amazon.com/config/latest/developerguide/conformance-packs.html)根据预期或期望的配置对其进行审查。

 对于在 Amazon EC2 实例、AWS Lambda、容器、移动应用程序或 IoT 设备上运行的应用程序中的动态配置，可以使用 [AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html) 在各环境中对其进行配置、验证、部署和监控。

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

1.  确定配置负责人。

   1.  让配置负责人了解任何合规性、治理或监管需求。

1.  确定配置项和可交付成果。

   1.  配置项是受 CI/CD 管道内的部署影响的所有应用程序和环境配置。

   1.  可交付成果包括成功标准、验证和要监控的内容。

1.  根据业务要求和交付管道，选择配置管理工具。

1.  考虑使用加权部署，例如用于重大配置更改的金丝雀部署，以便尽可能减少错误配置的影响。

1.  将配置管理集成到 CI/CD 管道中。

1.  验证推送的所有更改。

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

 **相关最佳实践：**
+  [OPS06-BP01 针对不成功的更改制定计划](ops_mit_deploy_risks_plan_for_unsucessful_changes.md) 
+  [OPS06-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_auto_testing_and_rollback.md) 

 **相关文档：**
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)
+ [AWS 登录区加速器](https://aws.amazon.com/solutions/implementations/landing-zone-accelerator-on-aws/)
+ [AWS Config](https://aws.amazon.com/config/)
+ [什么是 AWS Config？](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)
+  [AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html) 
+ [什么是 AWS CloudFormation？](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)
+  [AWS 开发人员工具](https://aws.amazon.com/products/developer-tools/) 
+ [AWS CodeBuild](https://aws.amazon.com/codebuild/)
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/)
+ [AWS CodeDeploy](https://aws.amazon.com/codedeploy/)

 **相关视频：**
+ [AWS re:Invent 2022 - Proactive governance and compliance for AWS workloads](https://youtu.be/PpUnH9Y52X0?si=82wff87KHXcc6nbT)
+ [AWS re:Invent 2020: Achieve compliance as code using AWS Config](https://youtu.be/m8vTwvbzOfw?si=my4DP0FLq1zwKjho)
+ [Manage and Deploy Application Configurations with AWS AppConfig](https://youtu.be/ztIxMY3IIu0?si=ovYGsxWOBysyQrg0)

# OPS05-BP04 使用构建和部署管理系统
<a name="ops_dev_integ_build_mgmt_sys"></a>

 使用构建和部署管理系统。这些系统可以减少手动过程引起的错误，并减少部署更改的工作量。

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

 **期望结果：**构建和部署管理系统支持组织的持续集成/持续交付（CI/CD）系统，该系统提供使用正确配置自动进行安全部署的功能。

 **常见反模式：**
+  在开发系统上编译代码后，将可执行文件复制到生产系统中，但它无法启动。本地日志文件显示这是因为缺少依赖项所致。
+  成功在开发环境中构建了具有新功能的应用程序，并将代码送交质量检查（QA）。由于缺少静态资产，它没有通过质量检查。
+  星期五，经过大量的努力，成功地在开发环境中手动构建了应用程序，包括新编码的功能。星期一，无法重复支持成功构建应用程序的步骤。
+  执行为新版本创建的测试。花费了接下来一周的时间来设置测试环境，并执行所有现有的集成测试，然后执行性能测试。新代码产生了难以接受的性能影响，因此必须重新开发并测试。

 **建立此最佳实践的好处：**制定相应机制来管理活动的构建和部署。这样，可以减少执行重复任务的工作量，让团队成员腾出时间专注于高价值的创造性任务，还可以减少手动程序导致的错误。

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

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

 构建和部署管理系统用于跟踪和实施变更，减少手动流程导致的错误，并减少安全部署所需的工作量。将集成和部署管道完全自动化，从代码签入到构建、测试、部署和验证都包含在内。这可以缩短准备时间，降低成本，鼓励更频繁地进行更改，减少工作量并增进协作。

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

![\[图中显示了使用 AWS CodePipeline 和相关服务的 CI/CD 管道\]](http://docs.aws.amazon.com/zh_cn/wellarchitected/latest/framework/images/deployment-pipeline-tooling.png)


 

1.  使用版本控制系统来存储和管理资产（例如文档、源代码和二进制文件）。

1.  使用 CodeBuild 来编译源代码，运行单元测试，并生成可供部署的构件。

1.  使用 CodeDeploy 作为部署服务，可以自动将应用程序部署到 [Amazon EC2](https://aws.amazon.com/ec2/) 实例、本地实例、[无服务器 AWS Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)或 [Amazon ECS](https://aws.amazon.com/ecs/)。

1.  监控部署。

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

 **相关最佳实践：**
+  [OPS06-BP04 自动测试和回滚](ops_mit_deploy_risks_auto_testing_and_rollback.md) 

 **相关文档：**
+  [AWS 开发人员工具](https://aws.amazon.com/products/developer-tools/) 
+  [什么是 AWS CodeBuild ？](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) 
+ [AWS CodeBuild](https://aws.amazon.com/codebuild/)
+  [什么是 AWS CodeDeploy ？](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) 

 **相关视频：**
+ [AWS re:Invent 2022 - AWS Well-Architected best practices for DevOps on AWS](https://youtu.be/hfXokRAyorA)

# OPS05-BP05 执行补丁管理
<a name="ops_dev_integ_patch_mgmt"></a>

 执行补丁管理以便实现功能、解决问题并保持监管合规性。实现自动补丁管理，减少手动流程导致的错误，进行扩展，并减少修补工作量。

 补丁和漏洞管理是益处与风险管理活动的一部分。最好是具有不可变的基础设施并在经验证的已知良好状态下部署工作负载。如果该方法不可行，那就只能进行修补。

 [AWS Health](https://aws.amazon.com/premiumsupport/technology/aws-health/) 是有关计划的生命周期事件以及其它影响 AWS 云 资源运行状况而需采取措施的事件的权威信息来源。您应该知道即将进行的更改和应执行的更新。计划的重大生命周期事件至少提前六个月发送。

 [Amazon EC2 Image Builder](https://aws.amazon.com/image-builder/) 提供了更新机器映像的管道。作为补丁管理的一部分，可以考虑使用 [AMI 映像管道](https://docs.aws.amazon.com/imagebuilder/latest/userguide/start-build-image-pipeline.html)的[亚马逊机器映像（AMI）](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html       )或带有 [Docker 映像管道](https://docs.aws.amazon.com/imagebuilder/latest/userguide/start-build-container-pipeline.html)的容器映像，而 AWS Lambda 提供适用于[自定义运行时和其他库](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html)的模式用来消除漏洞。

 应使用 [Amazon EC2 Image Builder](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html) 管理适用于 Linux 或 Windows Server 映像的[亚马逊机器映像（AMI）](https://aws.amazon.com/image-builder/)的更新。可以结合使用 [Amazon Elastic Container Registry（Amazon ECR）](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)和现有管道来管理 Amazon ECS 映像和 Amazon EKS 映像。Lambda 包含[版本管理功能](https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html)。

 在未事先在安全环境中测试的情况下，不应对生产系统执行修补操作。仅当补丁支持运营或业务成果时，才应该应用补丁。在 AWS 上，可以使用 [AWS Systems Manager Patch Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-patch.html) 自动完成托管系统的修补过程，并使用 [Systems Manager 维护时段](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-maintenance.html)安排活动。

 **期望结果：**AMI 和容器映像经过修补、处于最新状态，随时可以启动。可以跟踪所有已部署映像的状态，并了解补丁合规性。可以报告当前状态，并制定流程来满足合规性需求。

 **常见反模式：**
+  您接到任务，需要在两个小时内应用所有新的安全补丁，但由于应用程序与补丁不兼容，导致了多次停机。
+  没有安装补丁的库会引发意外后果，这是因为未知方会利用其中的漏洞来访问工作负载。
+  在未通知开发人员的情况下自动修补开发人员环境。收到来自开发人员的多起投诉，称他们的环境不能按预期运行。
+  尚未修补持久性实例上的现有商用软件。遇到软件问题并与供应商联系时，他们告知已不再为该版本提供支持，您必须安装特定级别的补丁才能获得帮助。
+  您使用的加密软件最近发布了新补丁，对性能进行了重大改进。未安装补丁的系统仍然存在性能问题，恰恰是因为没有安装补丁造成的。
+  您收到通知，告知存在零日漏洞，需要紧急修复，而您不得不手动为所有环境打补丁。
+  您不知道维护资源所需的关键操作，例如强制版本更新，因为您未查看即将发生的计划生命周期事件和其它信息。您错失了计划和执行的关键时间，导致团队发生紧急变化，并可能造成影响或意外停机。

 **建立此最佳实践的好处：**通过建立补丁管理流程，包括修补标准以及在环境中分发补丁的方法，可以进行扩展和报告补丁级别。这为安全补丁提供了保障，并确保清楚地了解已知修复的状态。这会促进采用所需特性和功能、快速解决问题并保持监管合规性。实施补丁管理系统和自动化，可减少部署补丁的工作量，并减少手动流程导致的错误。

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

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

 修补系统以便纠正问题、获得所需的特性或功能、符合监管政策并满足供应商支持需求。在不可变系统中，使用适当的补丁集进行部署，以便实现所需结果。自动执行补丁管理机制以便缩短修补时间、避免手动流程导致的错误，并减少修补工作量。

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

 对于 Amazon EC2 Image Builder：

1.  使用 Amazon EC2 Image Builder，指定管道详细信息：

   1.  创建映像管道并为其命名 

   1.  定义管道计划和时区 

   1.  配置任何依赖项 

1.  选择方案：

   1.  选择现有方案或创建新方案 

   1.  选择映像类型 

   1.  为方案命名并确定其版本 

   1.  选择基础映像 

   1.  添加构建组件并添加到目标注册表 

1.  可选 – 定义基础设施配置。

1.  可选 – 定义配置设置。

1.  查看设置。

1.  定期检查方案，保持方案正常发挥作用。

 对于 Systems Manager Patch Manager：

1.  创建补丁基准。

1.  选择补丁操作方法。

1.  启用合规性报告和扫描。

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

 **相关最佳实践：**
+  [OPS06-BP04 自动测试和回滚](ops_mit_deploy_risks_auto_testing_and_rollback.md) 

 **相关文档：**
+ [What is Amazon EC2 Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/what-is-image-builder.html)
+ [Create an image pipeline using the Amazon EC2 Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/start-build-image-pipeline.html)
+ [Create a container image pipeline](https://docs.aws.amazon.com/imagebuilder/latest/userguide/start-build-container-pipeline.html)
+  [AWS Systems Manager Patch Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-patch.html) 
+ [使用 Patch Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/patch-manager-console.html)
+ [使用补丁合规性报告](https://docs.aws.amazon.com/systems-manager/latest/userguide/patch-manager-compliance-reports.html)
+ [AWS 开发人员工具](https://aws.amazon.com/products/developer-tools)

 **相关视频：**
+  [CI/CD for Serverless Applications on AWS](https://www.youtube.com/watch?v=tEpx5VaW4WE) 
+  [Design with Ops in Mind](https://youtu.be/uh19jfW7hw4) 

   **相关示例：**
+ [AWS Systems Manager Patch Manager 教程](https://docs.aws.amazon.com/systems-manager/latest/userguide/patch-manager-tutorials.html)

# OPS05-BP06 共享设计标准
<a name="ops_dev_integ_share_design_stds"></a>

 在不同团队间共享最佳实践，以便提高认识并最大程度地实现开发工作的效益。随着架构的发展，记录最佳实践并使其保持最新。如果在组织中强制实施了共享标准，则必须制定相应的机制来请求对标准进行添加、更改和例外处理。如果没有这样的机制，标准将成为创新的约束。

 **期望结果：**在组织中的不同团队间共享设计标准。随着最佳实践的发展，记录标准并使其保持最新。

 **常见反模式：**
+ 两个开发团队各自创建了一个用户身份验证服务。对于用户来说，他们想要访问系统的每一部分，都必须使用一套单独的凭据。
+ 每个团队管理他们自己的基础设施。新的合规性要求迫使您更改基础设施，各个团队以不同的方式实施更改。

 **建立此最佳实践的好处：**使用共享标准支持最佳实践的采用，并充分实现开发工作的效益。记录和更新设计标准，让组织可以了解最新的最佳实践以及安全和合规性要求。

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

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

 在不同团队间共享现有的最佳实践、设计标准、检查清单、操作程序、指南和监管要求。建立针对设计标准的更改、添加和例外请求程序，以便支持改进和创新。让团队了解已发布的内容。随着新最佳实践的出现，制定一种机制来让设计标准保持最新。

 **客户示例** 

 AnyCompany Retail 拥有负责创建软件架构模式的跨职能架构团队。此团队构建具有内置合规性和治理的架构。采用这些共享标准的团队可以从内置合规性和治理中受益。他们可以在设计标准的基础上快速构建。架构团队每季度召开一次会议，评估架构模式，如有必要，更新架构模式。

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

1.  组建一个跨职能团队，负责开发和更新设计标准。此团队应与整个组织的利益相关方合作，制定设计标准、操作程序、检查清单、指南和治理要求。记录设计标准并在组织内共享。

   1.  [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html) 可用于使用基础设施即代码创建代表设计标准的产品组合。可以在不同账户间共享产品组合。

1.  随着新最佳实践的确定，制定一种机制来让设计标准保持最新。

1.  如果集中执行设计标准，则制定一个流程来请求更改、更新和豁免。

 **实施计划的工作量级别：**中。制定一个流程来创建和共享设计标准，就可以与整个组织的利益相关方进行协调与合作。

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

 **相关最佳实践：**
+  [OPS01-BP03 评估治理要求](ops_priorities_governance_reqs.md) – 治理要求会影响设计标准。
+  [OPS01-BP04 评估合规性要求](ops_priorities_compliance_reqs.md) – 在创建设计标准时，合规性是一项至关重要的输入。
+  [OPS07-BP02 确保以一致的方式对运营准备情况进行审查](ops_ready_to_support_const_orr.md) – 运营准备检查清单是一种在设计工作负载时实施设计标准的机制。
+  [OPS11-BP01 设置持续改进流程](ops_evolve_ops_process_cont_imp.md) – 更新设计标准是持续改进的一部分。
+  [OPS11-BP04 执行知识管理](ops_evolve_ops_knowledge_management.md) – 在知识管理实践过程中，记录和共享设计标准。

 **相关文档：**
+ [Automate AWS Backups with AWS Service Catalog](https://aws.amazon.com/blogs/mt/automate-aws-backups-with-aws-service-catalog/)
+ [AWS Service Catalog Account Factory-Enhanced](https://aws.amazon.com/blogs/mt/aws-service-catalog-account-factory-enhanced/)
+ [How Expedia Group built Database as a Service (DBaaS) offering using AWS Service Catalog](https://aws.amazon.com/blogs/mt/how-expedia-group-built-database-as-a-service-dbaas-offering-using-aws-service-catalog/)
+ [Maintain visibility over the use of cloud architecture patterns](https://aws.amazon.com/blogs/architecture/maintain-visibility-over-the-use-of-cloud-architecture-patterns/)
+ [Simplify sharing your AWS Service Catalog portfolios in an AWS Organizations setup](https://aws.amazon.com/blogs/mt/simplify-sharing-your-aws-service-catalog-portfolios-in-an-aws-organizations-setup/)

 **相关视频：**
+ [AWS Service Catalog – Getting Started](https://www.youtube.com/watch?v=A9kKy6WhqVA)
+ [AWS re:Invent 2020: Manage your AWS Service Catalog portfolios like an expert](https://www.youtube.com/watch?v=lVfXkWHAtR8)

 **相关示例：**
+ [AWS Service Catalog Reference Architecture](https://github.com/aws-samples/aws-service-catalog-reference-architectures)
+ [AWS Service Catalog 讲习会](https://catalog.us-east-1.prod.workshops.aws/workshops/d40750d7-a330-49be-9945-cde864610de9/en-US)

 **相关服务：**
+  [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html) 

# OPS05-BP07 实施提高代码质量的实践
<a name="ops_dev_integ_code_quality"></a>

 实施能够提高代码质量并尽可能减少缺陷的最佳实践。一些示例包括测试驱动型开发、代码审查、标准采用和结对编程。将这些实践合并到持续集成和交付流程中。

 **期望结果：**组织使用代码审查或结对编程等最佳实践来提高代码质量。在软件开发生命周期内，开发人员和操作人员采用代码质量最佳实践。

 **常见反模式：**
+  在没有进行代码审查的情况下将代码提交到应用程序的主分支。更改会自动部署到生产环境并导致中断。
+  开发新应用程序，而不进行任何单元测试、端到端测试或集成测试。在部署之前无法测试应用程序。
+  团队在生产中进行手动更改来解决缺陷问题。更改没有经过测试或代码审查，也不会通过持续集成和交付流程得到捕获或记录。

 **建立此最佳实践的好处：**通过采用提高代码质量的实践，能够帮助最大限度地减少引入生产中的问题。代码质量最佳实践包括结对编程、代码审查和实施人工智能生产力工具等。

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

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

 实施提高代码质量的实践，以便在部署代码之前尽可能减少缺陷。使用测试驱动型开发、代码审查和结对编程等实践来提高开发的质量。

 利用 Amazon Q 开发者版的生成式人工智能的强大功能，提高开发人员的生产力和代码质量。Amazon Q 开发者版包括生成代码建议（基于大型语言模型）、制作单元测试（包括边界条件），以及通过检测和修复安全漏洞来增强代码安全性。

 **客户示例** 

 AnyCompany Retail 采用几种实践来提高代码质量。他们采用了测试驱动型开发作为编写应用程序的标准。对于一些新功能，他们让开发人员在冲刺阶段结对编程。在集成和部署之前，由高级开发人员对每个拉取请求进行代码审查。

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

1.  在持续集成和交付流程中采用测试驱动型开发、代码审查和结对编程等代码质量实践。使用这些技术来提高软件质量。

   1.  使用 [Amazon Q 开发者版](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html)，这是一款生成式人工智能工具，可以帮助创建单元测试案例（包括边界条件）、使用代码和注释生成函数、实现已知算法、检测代码中的安全策略违规行为和漏洞、检测机密、扫描基础设施即代码（IaC）、记录代码以及更快地学习第三方代码库。

   1.  [Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html) 可以使用机器学习为 Java 和 Python 代码提供编程建议。

 **实施计划的工作量级别：**中。实施此最佳实践有很多方法，但获得组织采用可能并非易事。

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

 **相关最佳实践：**
+  [OPS05-BP02 测试并验证更改](https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_dev_integ_test_val_chg.html) 
+  [OPS05-BP06 共享设计标准](https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_dev_integ_share_design_stds.html) 

 **相关文档：**
+  [采用测试驱动型开发方法](https://docs.aws.amazon.com/prescriptive-guidance/latest/best-practices-cdk-typescript-iac/development-best-practices.html) 
+  [Accelerate your Software Development Lifecycle with Amazon Q](https://aws.amazon.com/blogs/devops/accelerate-your-software-development-lifecycle-with-amazon-q/) 
+  [Amazon Q Developer, now generally available, includes previews of new capabilities to reimagine developer experience](https://aws.amazon.com/blogs/aws/amazon-q-developer-now-generally-available-includes-new-capabilities-to-reimagine-developer-experience/) 
+  [The Ultimate Cheat Sheet for Using Amazon Q Developer in Your IDE](https://community.aws/content/2eYoqeFRqaVnk900emsknDfzhfW/the-ultimate-cheat-sheet-for-using-amazon-q-developer-in-your-ide) 
+  [Shift-Left Workload, leveraging AI for Test Creation](https://community.aws/content/2gBZtC94gPzaCQRnt4P0rIYWuBx/shift-left-workload-leveraging-ai-for-test-creation) 
+  [Amazon Q 开发人员中心](https://aws.amazon.com/developer/generative-ai/amazon-q/) 
+  [10 ways to build applications faster with Amazon CodeWhisperer](https://aws.amazon.com/blogs/devops/10-ways-to-build-applications-faster-with-amazon-codewhisperer/) 
+  [Looking beyond code coverage with Amazon CodeWhisperer](https://aws.amazon.com/blogs/devops/looking-beyond-code-coverage-with-amazon-codewhisperer/) 
+  [Best Practices for Prompt Engineering with Amazon CodeWhisperer](https://aws.amazon.com/blogs/devops/best-practices-for-prompt-engineering-with-amazon-codewhisperer/) 
+  《[Agile Software Guide](https://martinfowler.com/agile.html)》 
+  [My CI/CD pipeline is my release captain](https://aws.amazon.com/builders-library/cicd-pipeline/) 
+  [Automate code reviews with Amazon CodeGuru Reviewer](https://aws.amazon.com/blogs/devops/automate-code-reviews-with-amazon-codeguru-reviewer/) 
+  [采用测试驱动型开发方法](https://docs.aws.amazon.com/prescriptive-guidance/latest/best-practices-cdk-typescript-iac/development-best-practices.html) 
+  [How DevFactory builds better applications with Amazon CodeGuru](https://aws.amazon.com/blogs/machine-learning/how-devfactory-builds-better-applications-with-amazon-codeguru/) 
+  [On Pair Programming](https://martinfowler.com/articles/on-pair-programming.html) 
+  [RENGA Inc. automates code reviews with Amazon CodeGuru](https://aws.amazon.com/blogs/machine-learning/renga-inc-automates-code-reviews-with-amazon-codeguru/) 
+  [The Art of Agile Development: Test-Driven Development](http://www.jamesshore.com/v2/books/aoad1/test_driven_development) 
+  [Why code reviews matter (and actually save time\$1)](https://www.atlassian.com/agile/software-development/code-reviews) 

 **相关视频：**
+  [Implement an API with Amazon Q Developer Agent for Software Development](https://www.youtube.com/watch?v=U4XEvJUvff4) 
+  [Installing, Configuring, & Using Amazon Q Developer with JetBrains IDEs (How-to)](https://www.youtube.com/watch?v=-iQfIhTA4J0) 
+  [Mastering the art of Amazon CodeWhisperer - YouTube playlist](https://www.youtube.com/playlist?list=PLDqi6CuDzubxzL-yIqgQb9UbbceYdKhpK) 
+  [AWS re:Invent 2020: Continuous improvement of code quality with Amazon CodeGuru](https://www.youtube.com/watch?v=iX1i35H1OVw) 
+  [AWS Summit ANZ 2021 - Driving a test-first strategy with CDK and test driven development](https://www.youtube.com/watch?v=1R7G_wcyd3s) 

 **相关服务：**
+  [Amazon Q 开发者版](https://aws.amazon.com/q/developer/) 
+  [Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html) 
+  [Amazon CodeGuru Profiler](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html) 

# OPS05-BP08 使用多个环境
<a name="ops_dev_integ_multi_env"></a>

 使用多个环境来试验、开发和测试工作负载。当环境接近于生产环境时，逐步加强控制，确保工作负载在部署后能够按预期运行。

 **期望结果：**您有多个环境，这些环境均反映合规性和治理需求。在通往生产的道路上，可以通过环境来测试和推广代码。

1.  组织可通过建立登录区来实现这一目标，登录区可提供治理、控制、账户自动化、联网、安全性和运营可观测性。通过使用多个环境来管理这些登录区功能。一个常见的例子是沙盒组织，用于开发和测试对基于 [AWS Control Tower](https://aws.amazon.com/controltower/) 的登录区的更改，其中包括 [AWS IAM Identity Center](https://aws.amazon.com/iam/identity-center/) 和 [service control policies (SCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) 等策略。所有这些因素都会对登录区内 AWS 账户的访问和操作产生重大影响。

1.  除了这些服务外，您的团队还可通过 AWS 和 AWS 合作伙伴发布的解决方案，或作为组织内部开发的自定义解决方案，来扩展登录区的功能。AWS 发布的解决方案示例包括 [AWS Control Tower 的自定义选项（CfCT）](https://aws.amazon.com/solutions/implementations/customizations-for-aws-control-tower/)和 [AWS Control Tower Account Factory for Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html)。

1.  您的组织对登录区的测试、推广代码和策略变更采用相同的原则，贯穿通往生产之路的各个环境。该策略为您的应用程序和工作负载团队提供了一个稳定且安全的登录区环境。

 **常见反模式：**
+  您正在共享开发环境中执行开发，另一位开发人员将覆盖您的代码更改。
+  对共享开发环境严苛的安全控制导致您无法试验新的服务和功能。
+  对生产系统执行负载测试，导致用户停机。
+  生产中发生了严重错误，导致数据丢失。在生产环境中，尝试重新创建导致数据丢失的条件，以便能够确定它是如何发生的，并防止它再次发生。为了防止在测试期间再次丢失数据，您被迫采取措施，导致用户无法使用应用程序。
+  您正在运行多租户服务，无法支持客户对专用环境的请求。
+  您可能并不总是进行测试，但在需要测试时，您在生产环境中进行。
+  您认为单一环境的简单性比更改在环境中的影响范围更加重要。
+  您升级了一项关键的登录区功能，但此项更改会削弱您的团队为新项目或现有工作负载销售账户的能力。
+  您对 AWS 账户应用了新的控制，但此项更改会影响工作负载团队在其 AWS 账户内部署更改的能力。

 **建立此最佳实践的好处：**当您部署多个环境时，可以为多个同时进行的开发、测试和生产环境提供支持，而不会在开发人员或用户社区间造成冲突。对于诸如登录区之类的复杂功能，它可以显著降低变更风险，简化改进过程，并降低对环境进行关键更新的风险。使用登录区的组织自然会因其 AWS 环境中的多个账户而受益，包括账户结构、治理、网络和安全配置。随着时间推移，组织不断成长，登录区可以不断发展，以保护和组织您的工作负载和资源。

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

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

 使用多个环境，为开发人员提供控制机制最少的沙盒环境，协助进行试验。提供单独的开发环境来协助并行工作，并提高开发的敏捷性。在接近生产的环境中实施更严格的控制，让开发人员能够创新。使用基础设施即代码和配置管理系统来部署与生产环境中的控制机制配置一致的环境，确保系统在部署后按照预期运行。关闭不使用的环境，以免空闲资源（例如，晚上和周末的开发系统）产生费用。在负载测试时部署与生产等效的环境，以改善有效结果。

 诸如平台工程、网络和安全运营等团队通常在组织层面管理可满足不同要求的功能。单靠分离账户不足以为实验、开发和测试提供和维护单独的环境。在此类情况下，请创建单独的 AWS Organizations 实例。

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

 **相关文档：**
+ [AWS 实例调度器](https://aws.amazon.com/solutions/implementations/instance-scheduler-on-aws/)
+  [什么是 AWS CloudFormation ？](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 
+ [ Organizing Your AWS Environment Using Multiple Accounts - Multiple organizations - Test changes to your overall AWS environment ](https://docs.aws.amazon.com/whitepapers/latest/organizing-your-aws-environment/multiple-organizations.html#test-changes-to-your-overall-aws-environment)
+ [AWS Control Tower Guide ](https://catalog.workshops.aws/control-tower)

# OPS05-BP09 频繁进行可逆的小规模更改
<a name="ops_dev_integ_freq_sm_rev_chg"></a>

 频繁进行可逆的小规模更改可以减少更改的范围和影响。当与变更管理系统、配置管理系统以及构建和交付系统结合使用时，频繁进行可逆的小规模更改可以减少更改的范围和影响。这样可以提高故障排除工作的效率、加快修复速度，并支持回滚更改。

 **常见反模式：**
+  每季度部署一个新版本的应用程序，这会存在一个变更窗口，意味着核心服务将关闭。
+  经常更改数据库架构，而不跟踪管理系统中的更改。
+  执行手动就地更新，覆盖现有安装和配置，并且没有明确的回滚计划。

 **建立此最佳实践的好处：**通过频繁部署小更改，可以加快开发速度。更改很小时，更易于确定是否会带来意外后果，并且更容易撤回。更改可逆时，由于简化了恢复过程，因此实施更改的风险更小。更改过程的风险降低，更改失败的影响也减小。

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

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

 频繁进行可逆的小规模更改可以减小更改的范围和影响。这可以简化故障排除、加快修复速度，并支持回滚更改。这还可以加快实现业务价值。

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

 **相关最佳实践：**
+  [OPS05-BP03 使用配置管理系统](ops_dev_integ_conf_mgmt_sys.md) 
+  [OPS05-BP04 使用构建和部署管理系统](ops_dev_integ_build_mgmt_sys.md) 
+  [OPS06-BP04 自动测试和回滚](ops_mit_deploy_risks_auto_testing_and_rollback.md) 

 **相关文档：**
+ [在 AWS 上实施微服务](https://docs.aws.amazon.com/whitepapers/latest/microservices-on-aws/microservices-on-aws.html)
+ [Microservices - Observability](https://docs.aws.amazon.com/whitepapers/latest/microservices-on-aws/observability.html)

# OPS05-BP10 完全自动化集成和部署
<a name="ops_dev_integ_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/)应用元数据，以标识资源。标记资源，以便进行整理、成本核算、访问控制并有针对性地自动执行运营活动。

 **期望结果：**开发人员使用工具来交付代码并推广到生产环境。开发人员无需登录 AWS 管理控制台 即可提供更新。对更改和配置进行全面的审计跟踪记录，可满足治理和合规性需求。流程是可重复的，并且可跨团队实现标准化。开发人员可以腾出时间专注于开发和代码推送，从而提高工作效率。

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

 **建立此最佳实践的好处：**通过实施自动化的构建和部署管理系统，可以减少手动流程导致的错误，并减少部署更改的工作量，有助于团队成员专注于实现业务价值。推广到生产环境后，交付速度也随之提高。

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

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

 使用构建和部署管理系统来跟踪并实施更改，以便减少手动流程引起的错误，并减少工作量。将集成和部署管道完全自动化，从代码签入到构建、测试、部署和验证都包含在内。这可以缩短准备时间，鼓励更频繁地进行更改，减少工作量，提高面市速度，提升生产力，并增进代码在推广到生产环境时的安全性。

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

 **相关最佳实践：**
+  [OPS05-BP03 使用配置管理系统](ops_dev_integ_conf_mgmt_sys.md) 
+  [OPS05-BP04 使用构建和部署管理系统](ops_dev_integ_build_mgmt_sys.md) 

 **相关文档：**
+  [什么是 AWS CodeBuild ？](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) 
+  [什么是 AWS CodeDeploy ？](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) 

 **相关视频：**
+ [AWS re:Invent 2022 - AWS Well-Architected best practices for DevOps on AWS](https://youtu.be/hfXokRAyorA)