

# OPS 5  您如何減少缺陷、幫助輕鬆修復，以及改善生產流程？
<a name="w2aac19b5b7b7"></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 服務都提供版本控制功能。使用修訂版或原始程式碼控制系統 (例如 [AWS CodeCommit](https://aws.amazon.com/codecommit/) )，管理程式碼和其他成品，例如基礎架構之版本控制的 [AWS CloudFormation](https://aws.amazon.com/cloudformation/) 範本。 

 **常用的反模式：** 
+  您已在工作站上開發和存放程式碼。您在遺失程式碼的工作站上發生無法復原的儲存失敗。 
+  在您的變更覆寫現有的程式碼之後，您需重新啟動應用程式，且它將無法再運作。您無法還原為變更版本。 
+  您對另一人需要編輯的報告檔案加上了寫入鎖定。他們會與您聯絡，要求您停止處理該檔案，以便他們完成任務。 
+  您的研究團隊一直在進行詳細的分析，以塑造您未來的工作。某人意外地將他們的購物清單儲存在最終報告中。您無法還原變更，且必須重新建立報告。 

 **建立此最佳實務的優勢：** 透過使用版本控制功能，您可以輕鬆回復為已知的良好狀態、舊版本，並限制資產遺失的風險。 

 **若未建立此最佳實務，暴露的風險等級：** 高 

## 實作指引
<a name="implementation-guidance"></a>
+  使用版本控制：在版本控制的儲存庫中維護資產。此舉可實現變更追蹤、新版本部署、對現有版本的變更偵測以及還原到先前的版本 (例如，在發生故障時復原到已知的良好狀態)。將組態管理系統的版本控制功能整合到您的程序中。 
  +  [AWS CodeCommit 簡介](https://youtu.be/46PRLMW8otg) 
  +  [什麼是 AWS CodeCommit？](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) 

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

 **相關文件：** 
+  [什麼是 AWS CodeCommit？](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) 

 **相關影片：** 
+  [AWS CodeCommit 簡介](https://youtu.be/46PRLMW8otg) 

# OPS05-BP02 測試並驗證變更
<a name="ops_dev_integ_test_val_chg"></a>

 測試和驗證變更以幫助限制和偵測錯誤。自動化測試以減少由手動程序引起的錯誤，並減少測試工作量。 

 許多 AWS 服務都提供版本控制功能。使用修訂版或原始程式碼控制系統 (例如 [AWS CodeCommit](https://aws.amazon.com/codecommit/) )，管理程式碼和其他成品，例如基礎架構之版本控制的 [AWS CloudFormation](https://aws.amazon.com/cloudformation/) 範本。 

 **常用的反模式：** 
+  您將新程式碼部署到生產環境中，然後客戶開始來電，因為您的應用程式不再運作。 
+  您可以套用新的安全群組，以增強週邊安全。它在運作時隨附意外後果；您的使用者無法存取您的應用程式。 
+  您可以修改新函數所叫用的方法。另一個函數也依賴該方法，且不再運作。問題無法偵測到並進入生產環境。另一函數有一段時間不會被叫用，最後在生產環境中失敗，而無原因的任何關聯。 

 **建立此最佳實務的優勢：** 透過及早測試和驗證變更，您能以最低的成本來解決問題，並限制對客戶的影響。在部署前進行測試，可將引入的錯誤數量降到最低。 

 **若未建立此最佳實務，暴露的風險等級：** 高 

## 實作指引
<a name="implementation-guidance"></a>
+  測試並驗證變更：應該在生命週期的所有階段 (例如，開發、測試和生產) 測試變更並驗證結果。使用測試結果來確認新功能，並減輕失敗部署的風險和影響。自動執行測試和驗證，以確保檢閱的一致性，減少由手動程序引起的錯誤，並減少工作量。 
  +  [什麼是 AWS CodeBuild？](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) 
  +  [對 AWS CodeBuild 本機建置支援](https://aws.amazon.com/blogs/devops/announcing-local-build-support-for-aws-codebuild/) 

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

 **相關文件：** 
+  [AWS 開發人員工具](https://aws.amazon.com/products/developer-tools/) 
+  [對 AWS CodeBuild 本機建置支援](https://aws.amazon.com/blogs/devops/announcing-local-build-support-for-aws-codebuild/) 
+  [什麼是 AWS CodeBuild？](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) 

# OPS05-BP03 使用組態管理系統
<a name="ops_dev_integ_conf_mgmt_sys"></a>

 使用組態管理系統進行和追蹤組態變更。這些系統可減少由手動程序引起的錯誤，並減少部署變更的工作量。 

 靜態組態管理在初始化資源時設定值，這些值預期在資源的整個生命週期內保持一致。部分範例包括在執行個體上設定 Web 或應用程式伺服器的組態，或定義 AWS 服務 (在 [AWS 管理主控台](https://docs.aws.amazon.com/awsconsolehelpdocs/index.html) 內) 的組態，或透過下列項目定義該組態： [AWS CLI](https://aws.amazon.com/cli/)。 

 動態組態管理在初始化時設定值，這些值可以預期在資源的整個生命週期內保持一致。例如，您可以設定功能切換，透過組態變更啟用程式碼中的功能，或者在事故期間變更日誌詳細資訊等級以擷取更多資料，然後在事故後改回來，這會消除目前不需要的日誌及其相關費用。 

 如果您在執行個體、容器、無伺服器功能或裝置上執行的應用程式中具有動態組態，則可以使用 [AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html) 跨您的環境管理和部署它們。 

 在 AWS 上，您可以使用 [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html) 跨帳戶和區域持續監控 AWS [資源組態](https://docs.aws.amazon.com/config/latest/developerguide/aggregate-data.html)。它可讓您追蹤其組態歷史紀錄、了解組態變更如何影響其他資源、以及針對預期或所需的組態稽核它們，方法是使用 [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)。 

 在 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) 管道。 

 製作變更行事曆，並追蹤可能受到變更實作影響的計劃的重要業務或營運活動或事件。調整活動以管理這些計畫的風險。 [AWS Systems Manager 變更行事曆](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-change-calendar.html) AWS Systems Manager 變更行事曆提供一種機制，可將時間區塊記錄為變更開啟或變更關閉， [以及紀錄原因，](https://docs.aws.amazon.com/systems-manager/latest/userguide/change-calendar-share.html) 並與其他 AWS 帳戶 分享該資訊。AWS Systems Manager Automation 指令碼可設定為遵照變更行事曆狀態。 

 [AWS Systems Manager 維護時段](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-maintenance.html) 可用來在指定的時間排程 AWS SSM Run Command 或 Automation 指令碼、AWS Lambda 叫用或 AWS Step Functions 活動的效能。在變更行事曆中標記這些活動，以便將它們納入您的評估中。 

 **常用的反模式：** 
+  您跨機群手動更新 Web 伺服器組態，而且由於更新錯誤，許多伺服器無法回應。 
+  您在數小時內手動更新應用程式伺服器機群。變更期間的組態不一致會導致未預期的行為。 
+  某人已更新您的安全群組，無法再存取您的 Web 伺服器。若不知道發生了什麼變更，您需花大量時間來調查問題，從而延長復原的時間。 

 **建立此最佳實務的優勢：** 採用組態管理系統可減少進行和追蹤變更的工作量，以及手動程序造成的錯誤頻率。 

 **若未建立此最佳實務，暴露的風險等級為：** 中 

## 實作指引
<a name="implementation-guidance"></a>
+  使用組態管理系統：使用組態管理系統來追蹤和實作變更，以減少由手動程序引起的錯誤，並減少工作量。 
  +  [基礎設施組態管理](https://aws.amazon.com/answers/configuration-management/aws-infrastructure-configuration-management/) 
  +  [AWS Config](https://aws.amazon.com/config/) 
  +  [什麼是 AWS Config？](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html) 
  +  [AWS CloudFormation 簡介](https://youtu.be/Omppm_YUG2g) 
  +  [什麼是 AWS CloudFormation？](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 
  +  [AWS OpsWorks](https://aws.amazon.com/opsworks/) 
  +  [什麼是 AWS OpsWorks？](https://docs.aws.amazon.com/opsworks/latest/userguide/welcome.html) 
  +  [AWS Elastic Beanstalk 簡介](https://youtu.be/SrwxAScdyT0) 
  +  [什麼是 AWS Elastic Beanstalk？](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/Welcome.html) 

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

 **相關文件：** 
+  [AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html) 
+  [AWS 開發人員工具](https://aws.amazon.com/products/developer-tools/) 
+  [AWS OpsWorks](https://aws.amazon.com/opsworks/) 
+  [AWS Systems Manager 變更行事曆](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-change-calendar.html) 
+  [AWS Systems Manager 維護時段](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-maintenance.html) 
+  [基礎設施組態管理](https://aws.amazon.com/answers/configuration-management/aws-infrastructure-configuration-management/) 
+  [什麼是 AWS CloudFormation？](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 
+  [什麼是 AWS Config？](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html) 
+  [什麼是 AWS Elastic Beanstalk？](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/Welcome.html) 
+  [什麼是 AWS OpsWorks？](https://docs.aws.amazon.com/opsworks/latest/userguide/welcome.html) 

 **相關影片：** 
+  [AWS CloudFormation 簡介](https://youtu.be/Omppm_YUG2g) 
+  [AWS Elastic Beanstalk 簡介](https://youtu.be/SrwxAScdyT0) 

# OPS05-BP04 使用建置和部署管理系統
<a name="ops_dev_integ_build_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) 管道。 

 **常用的反模式：** 
+  在開發系統中編譯程式碼之後，您將可執行檔複製到生產系統中，然後其無法啟動。本機日誌檔案指出其因缺少相依性而失敗。 
+  您在開發環境中使用新功能成功建置應用程式，並將程式碼提供給品質保證 (QA)。它的 QA 失敗，原因是它缺少靜態資產。 
+  在花費大量精力之後的星期五，您已在開發環境中成功手動建置應用程式，包括您新編碼的功能。在星期一，您無法重複讓您成功建置應用程式的步驟。 
+  您執行為新版本建立的測試。然後，您會在下週設定測試環境，並執行所有現有的整合測試，接著執行效能測試。新的程式碼具有無法接受的效能影響，必須重新開發，然後重新測試。 

 **建立此最佳實務的優勢：** 透過提供用於管理建置和部署活動的機制，您可以減少執行重複性任務的工作量，讓團隊成員專注於高價值的創意任務，並限制手動程序引入錯誤。 

 **若未建立此最佳實務，暴露的風險等級：** 中 

## 實作指引
<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) 

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

 **相關文件：** 
+  [AWS 開發人員工具](https://aws.amazon.com/products/developer-tools/) 
+  [什麼是 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 CodeDeploy 簡介 - 使用 Amazon Web Services 進行自動化軟體部署](https://www.youtube.com/watch?v=Wx-ain8UryM) 
+  [Slalom：AWS 上適用於無伺服器應用程式的 CI/CD](https://www.youtube.com/watch?v=tEpx5VaW4WE) 

# OPS05-BP05 執行修補程式管理
<a name="ops_dev_integ_patch_mgmt"></a>

 執行修補程式管理以獲取功能，解決問題並保持遵循管控。自動化修補程式管理，以減少由手動程序引起的錯誤，並減少修補工作量。 

 修補程式和漏洞管理屬於您利益和風險管理活動的一部分。最好擁有不可變的基礎設施，並在已驗證的已知良好狀態下部署工作負載。如果這不可行，可選擇剩餘的方法，即實施修補程式。 

 更新機器映像、容器映像或 Lambda [或 Lambda 自訂執行階段和其他程式庫](https://docs.aws.amazon.com/lambda/latest/dg/security-configuration.html) 以移除漏洞，屬於修補程式管理的一部分。您 [應該](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html) 使用 [EC2 Image Builder，](https://aws.amazon.com/image-builder/)管理適用於 Linux 或 Windows Server 映像的 Amazon Machine Image (AMIs) 更新。您可以使用 [Amazon Elastic Container Registry](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) 搭配現有管道來 [管理 Amazon ECS 映像](https://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_on_ECS.html) 和 [管理 Amazon EKS 映像](https://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_on_EKS.html)。AWS 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) 自動化受管系統的修補程序，以及 [使用 AWS Systems Manager 維護時段](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-maintenance.html)。 

 **常用的反模式：** 
+  您必須在兩小時內套用所有新的安全性修補程式，結果導致應用程式與修補程式不相容而致使多次停機。 
+  未修補的程式庫會導致意外後果，因為未知方利用其中的漏洞來存取您的工作負載。 
+  您自動修補開發人員環境，而未通知開發人員。您收到來自開發人員的多個投訴，開發人員表示其環境如預期停止運作。 
+  您尚未在持久性執行個體上修補商用現成軟體。當您有軟體問題並聯絡廠商時，他們會通知您該版本不受支援，您必須修補至特定程度才能獲得任何協助。 
+  您使用的加密軟體的最新修補程式可大幅改善效能。未修補的系統因未修補仍存在效能問題。 

 **建立此最佳實務的優勢：** 透過建立修補程式管理程序 (包括修補的條件和跨環境分佈的方法)，您將能夠實現其優勢並控制其影響。這樣一來，便能採用所需的功能和特性、消除問題，並持續遵循管控要求。實作修補程式管理系統和自動化，以減少部署修補程式的工作量，並限制手動程序引起的錯誤。 

 **若未建立此最佳實務，暴露的風險等級：** 中 

## 實作指引
<a name="implementation-guidance"></a>
+  修補程式管理：修補系統以補救問題，獲得所需的功能或特性，並保持符合管控政策和供應商支援要求。在不可變系統中，部署適當的修補程式集以實現所需的結果。自動化修補程式管理機制，以縮短修補時間，減少由手動程序引起的錯誤並降低修補工作量。 
  +  [AWS Systems Manager Patch Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-patch.html) 

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

 **相關文件：** 
+  [AWS 開發人員工具](https://aws.amazon.com/products/developer-tools/) 
+  [AWS Systems Manager Patch Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-patch.html) 

 **相關影片：** 
+  [AWS 上適用於無伺服器應用程式的 CI/CD](https://www.youtube.com/watch?v=tEpx5VaW4WE) 
+  [設計時考量 OPS](https://youtu.be/uh19jfW7hw4) 

   **相關範例：** 
+  [Well-Architected 實驗室 – 庫存和修補程式管理](https://wellarchitectedlabs.com/operational-excellence/100_labs/100_inventory_patch_management/) 

# OPS05-BP06 共用設計標準
<a name="ops_dev_integ_share_design_stds"></a>

 在團隊之間共用最佳實務，以提高認識並最大化開發工作的效益。 

 在 AWS 上，可使用程式碼方法來定義和管理應用程式、運算、基礎設施和營運。如此一來，您可輕鬆進行發佈、分享及採用。 

 許多 AWS 服務和資源旨在跨帳戶進行分享，從而讓您可跨團隊分享已建立的資產和經驗。例如，您可將 [CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account.html) 儲存庫、 [Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-permissions.html) 函數、 [Amazon S3 儲存貯體](https://aws.amazon.com/premiumsupport/knowledge-center/cross-account-access-s3/)和 [AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sharingamis-explicit.html) 分享給特定帳戶。 

 發佈新資源或更新時，請使用 Amazon SNS 提供 [發佈通知](https://docs.aws.amazon.com/lambda/latest/dg/with-sns-example.html)。訂閱者可以使用 Lambda 獲得新版本。 

 如果您的組織中強制執行共用標準，則必須存在用於請求標準新增、變更及例外狀況的機制，以支援團隊的活動。如果沒有此選項，標準就會限制創新。 

 **常用的反模式：** 
+  您已建立自己的使用者身份驗證機制，且組織中的每一個其他開發團隊也是一樣。您的使用者必須針對要存取的系統的每一部分，維護一組單獨的登入資料。 
+  您已建立自己的使用者身份驗證機制，且組織中的每一個其他開發團隊也是一樣。必須滿足的新合規要求已加諸於您的組織。每個開發團隊現在都必須投資資源來實作新要求。 
+  您已建立自己的畫面版面配置，且組織中的每一個其他開發團隊也是一樣。您的使用者抱怨很難導覽不一致的介面。 

 **建立此最佳實務的優勢：** 使用共用標準來支援最佳實務之採用，並在標準滿足多個應用程式或組織的要求時，將開發工作的效益發揮到最大。 

 **若未建立此最佳實務，暴露的風險等級為：** 中 

## 實作指引
<a name="implementation-guidance"></a>
+  共用設計標準：在團隊之間分享現有的最佳實務、設計標準、檢查清單、操作程序以及指導和管控要求，以降低複雜性並最大化開發工作的收益。確保存在用於請求對設計標准進行變更、新增和例外的程序，以支援持續的改進和創新。確保團隊了解發佈的內容，以便他們可以利用內容，限制重新作業以及工作上徒勞無功。 
  +  [委託存取您的 AWS 環境](https://www.youtube.com/watch?v=0zJuULHFS6A&t=849s) 
  +  [共用 AWS CodeCommit 儲存庫](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-share-repository.html) 
  +  [輕鬆授權 AWS Lambda 函數](https://aws.amazon.com/blogs/compute/easy-authorization-of-aws-lambda-functions/) 
  +  [與特定 AWS 帳戶共用 AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sharingamis-explicit.html) 
  +  [使用 AWS CloudFormation Designer URL 加速範本共用](https://aws.amazon.com/blogs/devops/speed-template-sharing-with-an-aws-cloudformation-designer-url/) 
  +  [搭配 Amazon SNS 使用 AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/with-sns-example.html) 

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

 **相關文件：** 
+  [輕鬆授權 AWS Lambda 函數](https://aws.amazon.com/blogs/compute/easy-authorization-of-aws-lambda-functions/) 
+  [共用 AWS CodeCommit 儲存庫](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-share-repository.html) 
+  [與特定 AWS 帳戶共用 AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sharingamis-explicit.html) 
+  [使用 AWS CloudFormation Designer URL 加速範本共用](https://aws.amazon.com/blogs/devops/speed-template-sharing-with-an-aws-cloudformation-designer-url/) 
+  [搭配 Amazon SNS 使用 AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/with-sns-example.html) 

 **相關影片：** 
+  [委託存取您的 AWS 環境](https://www.youtube.com/watch?v=0zJuULHFS6A&t=849s) 

# OPS05-BP07 實作用於提高程式碼品質的實務
<a name="ops_dev_integ_code_quality"></a>

 實作實務以提高程式碼品質並將缺陷降至最少。部分範例包括測試驅動的開發、程式碼檢閱和標準採用。 

 在 AWS 上，您可以整合 [Amazon CodeGuru](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html) 這類服務與管道，以自動 [識別潛在程式碼和安全問題，](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/how-codeguru-reviewer-works.html) 方法為使用程式分析和機器分學習。CodeGuru 提供如何實作 AWS 最佳實務來解決這些問題的建議。 

 **常用的反模式：** 
+  為了能夠更快測試您的功能，您已決定不整合您的標準輸入清理程式庫。測試之後，您忘記要完成程式庫合併，就遞交程式碼。 
+  對於正在處理的資料集，您的經驗不多，且不知道資料集中可能存在一連串邊緣案例。這些邊緣案例與您實作的程式碼不相容。 

 **建立此最佳實務的優勢：** 透過採用提高程式碼品質的實務，您可以協助將引入生產中的問題降至最低。 

 **若未建立此最佳實務，暴露的風險等級：** 中 

## 實作指引
<a name="implementation-guidance"></a>
+  實作用於提高程式碼品質的實務：實作實務以提高程式碼品質，將缺陷和缺陷被部署的風險降至最低。例如，測試驅動的開發、結對程式設計、程式碼審查和標准採用。 
  +  [Amazon CodeGuru](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html) 

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

 **相關文件：** 
+  [Amazon CodeGuru](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html) 

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

 使用多個環境進行實驗、開發和測試您的工作負載。當環境接近生產環境時使用更高的控制等級，以確保您的工作負載在部署後將按預期執行。 

 **常用的反模式：** 
+  您在共享開發環境中進行開發，而另一名開發人員覆寫您的程式碼變更。 
+  對共享開發環境的限制性安全控制，讓您無法試驗新服務和功能。 
+  您對生產系統執行負載測試，並給使用者造成停機。 
+  在生產環境中發生導致資料遺失的嚴重錯誤。在您的生產環境中，您嘗試重新建立導致資料遺失的條件，以便您能夠識別其發生情況並防止再次發生。為防止更多資料在測試期間遺失，您必須讓使用者無法使用應用程式。 
+  您正在操作多租用戶服務，且無法支援客戶對專用環境的要求。 
+  您可能不一定總是進行測試，但當在生產環境中時，請務必測試。 
+  您認為簡單的單一環境會覆寫環境內變更的影響範圍。 

 **建立此最佳實務的優勢：** 透過部署多個環境，您可以支援多個同時開發、測試和生產環境，而不會在開發人員或使用者社群之間產生衝突。 

 **若未建立此最佳實務，暴露的風險等級：** 中 

## 實作指引
<a name="implementation-guidance"></a>
+  使用多個環境：為開發人員沙盒環境施加最少的控制，以推動實驗。提供多個單獨的開發環境，以使並行工作成為可能，從而提高開發敏捷性。在接近生產的環境中實作更嚴格的控制，以允許開發人員創新。使用基礎設施即程式碼和組態管理系統，以部署設定了與生產環境一致控制的環境，從而確保系統在部署時能夠按預期執行。當不使用環境時，關閉環境以避免與空閒資源相關的成本 (例如，在夜間和周末關閉開發系統)。進行負載測試時，部署與生產環境等效的環境，以獲得有效結果。 
  +  [什麼是 AWS CloudFormation？](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 
  +  [如何使用 AWS Lambda 定期停止和啟動 Amazon EC2 執行個體？](https://aws.amazon.com/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/) 

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

 **相關文件：** 
+  [如何使用 AWS Lambda 定期停止和啟動 Amazon EC2 執行個體？](https://aws.amazon.com/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/) 
+  [什麼是 AWS CloudFormation？](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 

# OPS05-BP09 進行頻繁、細微和可逆的變更
<a name="ops_dev_integ_freq_sm_rev_chg"></a>

 頻繁、細微和可逆的變更會縮小變更的範圍和影響。這樣可以簡化故障診斷，實現更快的修復，並提供回復變更的選項。 

 **常用的反模式：** 
+  您在每一季都部署應用程式的新版本。 
+  您經常變更資料庫結構描述。 
+  您執行手動就地更新，並覆寫現有的安裝和組態。 

 **建立此最佳實務的優勢：** 您透過經常部署小的變更，更快認識到開發工作帶來的效益。當變更很小時，可更容易識別它們是否會產生意外的後果。如果變更可逆，由於復原得到簡化，實作變更的風險會更小。 

 **若未建立此最佳實務，暴露的風險等級為：** 低 

## 實作指引
<a name="implementation-guidance"></a>
+  進行頻繁、細微、可逆的變更：頻繁、細微和可逆的變更可縮小變更範圍和變更影響。這樣可以簡化故障診斷，實現更快的修復，並提供回復變更的選項。它還可以提高您為企業帶來價值的速度。 

# 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/) 以識別您的資源。標記您的資源，以用於組織、成本會計、存取控制，以及將自動執行營運活動設為目標。 

 **常用的反模式：** 
+  週五，您完成了為功能分支編寫新程式碼。週一，在執行您的程式碼品質測試指令碼和每個單位測試指令碼之後，您將針對下一排程版本來檢查程式碼。 
+  系統會指派您編寫修正程式碼，以解決影響生產環境中大量客戶的重大問題。測試修正後，您遞交程式碼和電子郵件變更管理內容，以請求核准將其部署到生產環境中。 

 **建立此最佳實務的優勢：** 透過實作自動化建置和部署管理系統，您可以減少手動程序引起的錯誤，以及部署變更的工作量，讓您的團隊成員能夠專注於提供商業價值。 

 **若未建立此最佳實務，暴露的風險等級：** 低 

## 實作指引
<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) 

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

 **相關文件：** 
+  [什麼是 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 CodeDeploy 簡介 - 使用 Amazon Web Services 進行自動化軟體部署](https://www.youtube.com/watch?v=Wx-ain8UryM) 
+  [Slalom：AWS 上適用於無伺服器應用程式的 CI/CD](https://www.youtube.com/watch?v=tEpx5VaW4WE) 