

# OPS06-BP02 測試部署
<a name="ops_mit_deploy_risks_test_val_chg"></a>

 使用與生產環境相同的部署組態、安全控制、步驟和程序，在生產前測試發行程序。驗證所有部署的步驟均按照預期完成，例如檢查檔案、組態和服務。透過功能、整合和負載測試以及任何監控 (例如運作狀態檢查) 進一步測試所有變更。透過這些測試，您可以及早發現部署問題，有機會在生產前進行規劃和問題緩解。

 您可以建立暫時的平行環境來測試每項變更。使用基礎設施即程式碼 (IaC) 來自動化測試環境的部署，協助減少涉及的工作量，並確保穩定性、一致性和更快的功能交付。

 **預期成果：**您的組織採用測試驅動型開發文化，其中包含測試部署。如此一來，便能確保團隊專注於交付商業價值，而非管理發行版本。團隊會及早找出部署風險，並訂定適當的緩解方案。

 **常見的反模式：**
+  使用生產版本期間，因為未經測試的部署經常會導致問題，而需要疑難排解或升級處理。
+  您的版本包含更新現有資源的基礎設施即程式碼 (IaC)。您不確定 IaC 是否會成功執行，或對資源造成影響。
+  您為應用程式部署一個新功能。該功能無法按照您的預期運作，且在受影響的使用者回報之前無法預見問題。
+  您更新憑證。您不小心將憑證安裝到錯誤的元件，這些元件未被偵測並因為無法建立與網站的安全連線，而影響了網站訪客。

 **建立此最佳實務的優勢：**針對部署程序的生產前階段及其帶來的變更進行廣泛測試，將部署步驟對生產的潛在負面影響降到最低。這麼做能增加產品發行期間的信心，並盡可能減少操作支援，同時不影響交付變更的速度。

 **未建立此最佳實務時的曝險等級：**高 

## 實作指引
<a name="implementation-guidance"></a>

 測試部署程序與測試部署所產生的變更同樣重要。您可以在生產前環境中測試部署步驟，盡可能準確反映生產環境。諸如不完整或錯誤部署步驟，或者配置錯誤等常見問題都能在生產環境之前偵測。此外，您也可以測試回復步驟。

 **客戶範例** 

 作為持續整合和持續交付 （CI/CD） 管道的一部分， AnyCompany Retail 會執行在類似生產環境中為其客戶發佈基礎設施和軟體更新所需的定義步驟。流程包含許多預先檢查程序，可以在部署之前偵測到資源偏移 (偵測 IaC 以外所執行的資源變更)，以及驗證 IaC 啟動時所採取的動作。這個程序會驗證部署步驟，例如確認特定檔案和組態已準備就緒，或服務處於執行狀態，並在向負載平衡器重新註冊之前，正確回應本機上的運作狀態檢查。此外，所有變更都標記了許多自動化測試，例如功能、安全性、迴歸、整合和負載測試。

### 實作步驟
<a name="implementation-steps"></a>

1.  執行安裝前檢查，將生產前環境反映到生產環境。

   1.  使用[偏離偵測](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html)來偵測 資源是否已在 之外變更 CloudFormation。

   1.  使用[變更集](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html)來驗證堆疊更新的意圖是否符合啟動變更集時 CloudFormation 採取的動作。

1.  這會觸發 [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/approvals.html) 中的手動核准步驟，以授權生產前環境的部署。

1.  使用[AWS CodeDeploy AppSpec](https://docs.aws.amazon.com/codedeploy/latest/userguide/application-specification-files.html)檔案等部署組態來定義部署和驗證步驟。

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 CloudWatch AWS CloudTrail、 和 Amazon SNS事件通知來[監控部署](https://docs.aws.amazon.com/codedeploy/latest/userguide/monitoring.html)。

1.  執行部署後自動化測試，包括功能、安全性、迴歸、整合和負載測試。

1.  對部署問題[​進行故障診斷](https://docs.aws.amazon.com/codedeploy/latest/userguide/troubleshooting.html)。

1.  成功驗證前述步驟後，應該啟動手動核准工作流程，以授權部署到生產環境。

 **實作計劃的工作量：**高 

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

 **相關的最佳實務：**
+  [OPS05-BP02 測試並驗證變更](ops_dev_integ_test_val_chg.md) 

 **相關文件：**
+ [AWS Builders' Library \$1 自動化安全、移交部署 \$1 測試部署 ](https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments/#Test_deployments_in_pre-production_environments)
+ [AWS 白皮書 \$1 在 上練習持續整合和持續交付 AWS](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/testing-stages-in-continuous-integration-and-continuous-delivery.html)
+ [阿波羅的故事 - Amazon 的部署引擎](https://www.allthingsdistributed.com/2014/11/apollo-amazon-deployment-engine.html)
+  [如何在運送程式碼之前在 AWS CodeDeploy 本機進行測試和偵錯](https://aws.amazon.com/blogs/devops/how-to-test-and-debug-aws-codedeploy-locally-before-you-ship-your-code/) 
+ [整合網路連線測試與基礎設施部署](https://aws.amazon.com/blogs/networking-and-content-delivery/integrating-network-connectivity-testing-with-infrastructure-deployment/)

 **相關影片：**
+ [re:Invent 2020 \$1在 Amazon 測試軟體和系統](https://www.youtube.com/watch?v=o1sc3cK9bMU)

 **相關範例：**
+ [ 教學課程 \$1 透過驗證測試部署 和 Amazon ECS服務 ](https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorial-ecs-deployment-with-hooks.html)