

# OPS06-BP03 採用安全的部署策略
<a name="ops_mit_deploy_risks_deploy_mgmt_sys"></a>

 安全的生產部署可控制有益變更的流程，目的是將這些變更對客戶造成的任何影響降到最低。安全控制提供檢查機制，以驗證所需的結果，並限制變更引入的任何缺陷或部署失敗造成的影響範圍。安全推出可能包括諸如功能旗標、一體式、滾動式 (Canary 版本)、不可變、流量拆分和藍/綠部署等策略。

 **預期成果：**您的組織使用持續整合持續交付 (CI/CD) 系統，可提供自動化安全部署的功能。團隊必須使用適當的安全推出策略。

 **常見的反模式：**
+  您一次性將失敗的變更部署至所有生產環境。因此，所有客戶都會同時受到影響。
+  同時部署到所有系統中引入的缺陷需要緊急釋放。為所有客戶修正它需要數天的時間。
+  管理生產發行需要多個團隊的規劃和參與。這會限制您為客戶經常更新功能的能力。
+  您透過修改現有系統來執行可變部署。發現變更失敗之後，您必須再次修改系統以還原舊版本，這會延長回復時間。

 **建立此最佳實務的優勢：**自動化部署在推出速度和持續為客戶提供有益變更之間取得了平衡。限制影響範圍可以預防損失慘重的部署失敗，並盡可能提高團隊有效回應故障的能力。

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

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

 持續交付失敗可能導致服務可用性降低和糟糕的客戶體驗。為了盡可能提高部署成功率，請在端對端發行程序中實施安全控制，盡量減少部署錯誤，而目標則是實現零部署失敗。

 **客戶範例** 

 AnyCompany Retail 的使命是實現最小至零停機時間的部署，這表示部署期間沒有對使用者產生任何可感知的負面影響。為此，公司已建立了部署模式 (請參閱下列工作流程圖表)，例如滾動部署和藍/綠部署。所有團隊都在其 CI/CD 管道中採用一個或多個模式。


| Amazon EC2 的 CodeDeploy 工作流程 | Amazon ECS 的 CodeDeploy 工作流程 | Lambda 的 CodeDeploy 工作流程 | 
| --- | --- | --- | 
|  ![\[Amazon EC2 的部署程序流程\]](http://docs.aws.amazon.com/zh_tw/wellarchitected/latest/operational-excellence-pillar/images/deployment-process-ec2.png)  |  ![\[Amazon ECS 的部署程序流程\]](http://docs.aws.amazon.com/zh_tw/wellarchitected/latest/operational-excellence-pillar/images/deployment-process-ecs.png)  |  ![\[Lambda 的部署程序流程\]](http://docs.aws.amazon.com/zh_tw/wellarchitected/latest/operational-excellence-pillar/images/deployment-process-lambda.png)  | 

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

1.  推廣到生產之後，使用核准工作流程可啟動生產推出步驟的一系列動作。

1.  使用自動化部署系統，例如 [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)。AWS CodeDeploy [部署選項](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-steps.html)包括適用於 EC2/內部部署的就地部署，以及適用於 EC2/內部部署、AWS Lambda 和 Amazon ECS 的藍/綠部署 (請參閱上述工作流程圖)。

   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 Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) 和 [Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) 等資料庫使用藍/綠部署。

1.  使用 Amazon CloudWatch、AWS CloudTrail 和 Amazon Simple Notification Service (Amazon SNS) 事件通知來[監控部署](https://docs.aws.amazon.com/codedeploy/latest/userguide/monitoring.html)。

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

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

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

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

 **相關的最佳實務：**
+  [OPS05-BP02 測試並驗證變更](ops_dev_integ_test_val_chg.md) 
+  [OPS05-BP09 進行頻繁、小型、可逆的變更](ops_dev_integ_freq_sm_rev_chg.md) 
+  [OPS05-BP10 完全自動化整合和部署](ops_dev_integ_auto_integ_deploy.md) 

 **相關文件：**
+ [AWS 建置者資料中心 \$1 自動化安全、無人為介入的部署 \$1 生產部署](https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments/?did=ba_card&trk=ba_card#Production_deployments)
+ [AWS 建置者資料中心 \$1 我的 CI/CD 管道是我的發行主管 \$1 安全、自動的生產發行](https://aws.amazon.com//builders-library/cicd-pipeline/#Safe.2C_automatic_production_releases)
+ [AWS 白皮書 \$1 在 AWS 上實行持續整合和持續交付 \$1 部署方法](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/deployment-methods.html)
+ [AWS CodeDeploy使用者指南](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)
+ [使用 ​AWS CodeDeploy 中的部署組態](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html)
+ [設定 API Gateway Canary 發行部署](https://docs.aws.amazon.com/apigateway/latest/developerguide/canary-release.html)
+ [Amazon ECS 部署類型](https://docs.aws.amazon.com/)
+ [Amazon Aurora 和 Amazon RDS 中的全受管藍/綠部署](https://aws.amazon.com/blogs/aws/new-fully-managed-blue-green-deployments-in-amazon-aurora-and-amazon-rds/)
+ [使用 AWS Elastic Beanstalk 的藍/綠部署](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html)

 **相關影片：**
+ [re:Invent 2020 \$1 無人為介入：Amazon 的自動化持續交付管道](https://www.youtube.com/watch?v=ngnMj1zbMPY)
+ [re:Invent 2019 \$1 Amazon 的高可用性部署方法](https://www.youtube.com/watch?v=bCgD2bX1LI4)

 **相關範例：**
+ [在 AWS CodeDeploy 中嘗試使用藍/綠部署範例](https://docs.aws.amazon.com/codedeploy/latest/userguide/applications-create-blue-green.html)
+ [ 研討會 \$1 使用 AWS CDK 建置 Lambda Canary 部署的 CI/CD 管道](https://catalog.workshops.aws/cdk-cicd-for-lambda-canary-deployment/en-US) 
+ [ 研討會 \$1 利用 Amazon ECS 建置您的第一個 DevOps 藍/綠管道 ](https://catalog.us-east-1.prod.workshops.aws/workshops/4b59b9fb-48b6-461c-9377-907b2e33c9df/en-US)
+ [ 研討會 \$1 利用 Amazon EKS 建置您的第一個 DevOps 藍/綠管道 ](https://catalog.us-east-1.prod.workshops.aws/workshops/4eab6682-09b2-43e5-93d4-1f58fd6cff6e/en-US)
+ [ 研討會 \$1 EKS GitOps 搭配 ArgoCD ](https://catalog.workshops.aws/eksgitops-argocd-githubactions)
+ [ 研討會 \$1 AWS 上的 CI/CD 研討會 ](https://catalog.workshops.aws/cicdonaws/en-US)
+ [ 針對容器型 Lambda 函數使用 AWS SAM 實作跨帳戶 CI/CD ](https://aws.amazon.com/blogs/compute/implementing-cross-account-cicd-with-aws-sam-for-container-based-lambda/)