

# 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 上，您可以使用 [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)。 

 如果您在 Amazon EC2 執行個體、AWS Lambda、容器、行動應用程式或 IoT 裝置上執行的應用程式中具有動態組態，則可以使用 [AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html) 在您的環境中設定、驗證、部署和監控這些組態。 

 在 AWS 上，您可以使用 [AWS 開發人員工具](https://aws.amazon.com/products/developer-tools/) 例如：[AWS CodeCommit](https://aws.amazon.com/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) 管道。 

 **預期成果：** 您會在持續整合、持續交付 (CI/CD) 管道中進行設定、驗證和部署。您會進行監控，以確認組態正確無誤。這會將終端使用者和客戶受到的任何負面影響降到最低。 

 **常見的反模式：** 
+  您手動更新整個機群的 Web 伺服器組態，但由於更新錯誤，導致多部伺服器無法回應。 
+  您在數小時內手動更新應用程式伺服器機群。變更期間的組態不一致會導致未預期的行為。 
+  某人已更新您的安全群組，無法再存取您的 Web 伺服器。若不知道進行了哪些變更，您就需要花大量時間來調查問題，復原時間也會跟著拉長。 
+  您可以透過 CI/CD 將生產前組態推送到生產環境中，而不需進行驗證。您讓使用者和客戶面臨使用不正確的資料和服務。 

 **建立此最佳實務的優勢：** 採用組態管理系統可減少進行和追蹤變更的工作量，以及手動程序造成的錯誤頻率。組態管理系統提供了管控、合規和法規需求方面的保證。 

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

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

 組態管理系統可用來追蹤和實作應用程式與環境組態的變更。組態管理系統也可用來減少手動程序所造成的錯誤、讓組態變更可重複且可稽核，以及減少工作量。 

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

1.  確定組態擁有者。 

   1.  讓組態擁有者得知任何合規、管控或法規需求。 

1.  確定組態項目與交付成果。 

   1.  組態項目是指受到 CI/CD 管線內部署影響的所有應用程式和環境組態。 

   1.  交付成果包括成功條件、驗證及監控對象。 

1.  請根據您的業務需求和交付管道選取工具來進行組態管理。 

1.  請考慮針對重大組態變更進行加權部署 (例如金絲雀部署)，以盡量減少錯誤組態造成的影響。 

1.  將組態管理整合到 CI/CD 管道中。 

1.  驗證所有推送的變更。 

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

 **相關的最佳實務：** 
+  [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_auto_testing_and_rollback.md) 

 **相關文件：** 
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)
+ [AWS 登陸區域加速器 ](https://aws.amazon.com/solutions/implementations/landing-zone-accelerator-on-aws/)
+ [AWS Config](https://aws.amazon.com/config/)
+ [ 什麼是 AWS Config？ ](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)
+  [AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html) 
+ [ 什麼是 AWS CloudFormation？ ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)
+  [AWS 開發人員工具](https://aws.amazon.com/products/developer-tools/) 

 **相關影片：** 
+ [AWS re:Invent 2022 - AWS 工作負載的主動管控與合規 ](https://youtu.be/PpUnH9Y52X0?si=82wff87KHXcc6nbT)
+ [AWS re:Invent 2020：使用 AWS Config 實現合規即程式碼 ](https://youtu.be/m8vTwvbzOfw?si=my4DP0FLq1zwKjho)
+ [ 使用 AWS AppConfig 管理和部署應用程式組態 ](https://youtu.be/ztIxMY3IIu0?si=ovYGsxWOBysyQrg0)