

# OPS 6  您如何緩解部署風險？
<a name="w2aac19b5b7b9"></a>

 採用可快速提供品質意見回饋，並從成果不盡理想的改變中快速復原的方法。使用這些實務可緩解部署變更所帶來問題的影響。 

**Topics**
+ [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_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)，從而減少對最終使用者的影響。 

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

## 實作指引
<a name="implementation-guidance"></a>
+  為失敗變更進行規劃：計劃在變更未達到理想成果時，恢復到已知的良好狀態 (即回復變更)，或者在生產環境中進行補救 (即向前回復變更)。當您確定無法回復的變更時，在提交之前應進行盡職調查。 

# OPS06-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 Canary 版本部署](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 Canary 版本部署](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 Canary 版本部署](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 Canary 版本部署](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) 