

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

 安全的生產上市可以控制正面變更的流程，目的是將這些變更對客戶造成的任何負面影響降到最低。安全控制提供檢查機制，以驗證預期結果，並限制變更所帶來的任何負面影響或部署失敗造成的影響範圍。安全上市可能包括諸如功能旗標、一體式、滾動式 (金絲雀版本)、不可變、流量拆分和藍/綠部署等策略。 

 **預期成果：** 您的組織使用持續整合與持續交付 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/2023-10-03/framework/images/deployment-process-ec2.png)  |  ![\[Amazon ECS 的部署程序流程\]](http://docs.aws.amazon.com/zh_tw/wellarchitected/2023-10-03/framework/images/deployment-process-ecs.png)  |  ![\[Lambda 的部署程序流程\]](http://docs.aws.amazon.com/zh_tw/wellarchitected/2023-10-03/framework/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/內部部署的就地部署和藍/綠部署、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.  [監控部署](https://docs.aws.amazon.com/codedeploy/latest/userguide/monitoring.html) 時會使用 Amazon CloudWatch、AWS CloudTrail,和 Amazon SNS 事件通知。 

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 管道是我的 release captain \$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 金絲雀版本部署 ](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)
+ [Worlshop \$1 使用 AWS CDK 為 Lambda 金絲雀部署建置 CI/CD 管道](https://catalog.us-east-1.prod.workshops.aws/workshops/5195ab7c-5ded-4ee2-a1c5-775300717f42/en-US)
+ [Workshop \$1 EKS 和 ECS 的藍/綠和金絲雀部署](https://catalog.us-east-1.prod.workshops.aws/workshops/2175d94a-cd79-4ed2-8e7e-1f0dd1956a3a/en-US)
+ [Workshop \$1 建置跨帳戶 CI/CD 管道](https://catalog.us-east-1.prod.workshops.aws/workshops/00bc829e-fd7c-4204-9da1-faea3cf8bd88/en-US)