使用基礎結構即程式代碼的建議

適用於此 Azure Well-Architected Framework Operational Excellence 檢查列表建議:

OE:05 使用標準化基礎結構作為程序代碼 (IaC) 方法,準備資源及其設定。 與其他程式代碼一樣,使用一致的樣式、適當的模組化和品質保證設計 IaC。 盡可能偏好宣告式方法。

本指南說明使用 IaC 作為基礎結構部署標準的建議。 使用 IaC 可讓您將基礎結構部署和管理整合到現有的軟體開發實務中。 它提供一致的標準方法來開發和部署工作負載的所有元件。 依賴手動部署可讓工作負載面臨設定不一致的風險,而且可能不安全的設計。

定義

詞彙 定義
宣告式工具 定義部署端狀態的工具類別,並依賴系統來判斷如何部署資源以符合定義的結束狀態。
不可變的基礎結構 要以新基礎結構取代的基礎結構,它會在每個部署中執行新的組態。 它不得就地變更。
命令式工具 列出導致所需結束狀態之執行步驟的工具類別。
模組 分割資源群組以簡化複雜部署的抽象單位。
可變動的基礎結構 要就地變更的基礎結構。 部署會變更基礎結構的組態,而不是將它取代為新的基礎結構。

主要設計策略

供應鏈標準化工具和程式 指南所述,您應該有嚴格的原則來部署基礎結構變更, (包括僅透過程式代碼) 設定變更。 您應該透過持續整合和持續傳遞 (CI/CD) 管線來部署 IaC。 採用這些原則會在所有 IaC 部署的程式中強制執行一致性、將設定漂移的風險降到最低,並確保整個環境的基礎結構一致性。 此外,您應該在樣式指南中標準化 IaC 開發和部署工具和程式。 樣式指南的建議包括:

偏好宣告式而非命令式工具。 宣告式工具及其相關聯的檔案是部署和管理 IaC 比命令式工具更好的整體選擇。 宣告式工具會針對其定義檔案使用更簡單的語法,在部署完成後只定義環境的預期狀態。 命令式工具取決於您定義取得所需結束狀態所需的步驟,因此檔案比宣告式檔案更複雜。 宣告式定義檔也有助於減少維護命令式程式代碼的技術責任,例如部署腳本,這些程式代碼可能會隨著時間累積。

使用雲端平臺的原生工具和原生整合至平臺的其他經過業界證實的工具。 您的雲端平臺提供工具,讓部署 IaC 變得簡單且簡單。 利用這些工具和其他具有原生整合的第三方工具,例如 Terraform,而不是開發您自己的解決方案。 平台支援原生工具,並包含您大部分需求的內建功能。 平臺提供者會持續更新它們,使其在平臺演進時更實用。

注意

請注意,當雲端提供者和第三方開發人員更新其工具和 API 時,您可以在工作負載中使用最新版本時,執行非預期的問題風險。 請務必先徹底測試新版本的工具和 API,再加以採用。 同樣地,在部署程式代碼中呼叫工具或 API 時,請避免使用 'latest' 旗標。 刻意呼叫您工作負載的最新已知良好版本。

針對特定工作和基礎結構類型使用正確的工具。 除了部署之外,多個工作也涉及基礎結構生命週期。 例如,您必須套用和維護組態,以及您用來編寫部署腳本的工具,例如 Bicep,可能不是每個管理作業的最佳工具。

同樣地,針對不同的基礎結構類型套用所需的狀態設定 (DSC) 可能需要不同的工具。 例如,有 Ansible 之類的特定工具可用來管理 VM 的 DSC,而 Flux 是管理 Kubernetes 叢集上的 DSC 的好工具。 平臺即服務 (PaaS) 服務可能會提供不同的工具來進行組態管理 (,例如可透過 IaC 處理的 Azure 應用程式組態) 。 軟體即服務 (SaaS) 服務可能較為有限,因為它們受到平臺更嚴格控制。

請思考 IaC 做法範圍內的所有工作和基礎結構類型,並針對執行所需工作的工具進行標準化,並可整合到您的開發和管理實務中。

您的腳本和範本應該有足夠的彈性,以便輕鬆地部署各種環境。 使用參數、變數和組態檔來部署可修改的標準資源集,以在程式代碼升級堆疊中部署任何環境。 摘要設定,例如資源大小、計數、名稱、要部署的位置,以及一些組態設定。 不過,請小心不要抽象太多。 有一些設定可以使用參數或變數來抽象化,這些設定可能不會在工作負載生命週期過程中實際變更,或可能很少變更。 不應該抽象化。

注意

請避免針對不同的環境使用不同的 IaC 資產。 例如,您不應該有不同的生產與測試環境的 Terraform 檔案。 所有環境都應該使用一個檔案。 您可以視需要操作該檔案,以部署到不同的環境。

對模組的使用進行策略化和標準化。 如同參數和變數, 模組 可讓您的基礎結構部署可重複。 不過,請仔細考慮如何使用它們。 標準化抽象策略有助於確保模組是建置以符合特定、已同意的目標。 使用模組來封裝複雜的組態或資源組合。 如果您只使用資源的預設組態,請避免模組。 此外,在開發新課程模組時要謹慎。 適當時,請使用維護的開放原始碼模組,例如不區分大小寫的案例。

手動步驟的文件標準。 部署和維護您環境特有的基礎結構,以及需要手動介入的基礎結構,可能會有相關步驟。 請確定這些步驟盡可能最小化並清楚記載。 在您的樣式指南和標準作業程式中,標準化手動步驟,以確保工作能安全地且一致地執行。

處理孤立資源的文件標準。 根據您用於設定管理的工具及其限制,您的工作負載不再需要特定資源,而且您的 IaC 工具無法自動移除資源時,可能會有一些時間。 例如,假設您要從 VM 移至某些函式的 PaaS 服務,而 IaC 工具沒有邏輯可移除已淘汰的資源。 如果工作負載小組不記得手動刪除這些資源,這些資源可能會遭到遺棄。 若要處理這些案例,請標準化策略以掃描孤立的資源並加以刪除。 您也必須考慮如何確定您的範本是最新的。 研究 IaC 工具的限制,以瞭解在這些情況下可能需要規劃的內容。

其他 IaC 策略

請考慮針對您的工作負載使用 IaC 適用的下列建議:

使用分層方法來對齊工作負載堆疊內的 IaC 管線。 將 IaC 管線分成多個層級,可協助您管理複雜的環境。 將數十或數百個資源部署為整合型套件沒有效率,而且可能會造成多個問題,例如中斷的相依性。 使用多個管線,這些管線與資源所組成的層級,其部署生命週期或功能等因素緊密相符,可讓管理 IaC 部署變得更容易。

網路資源等核心基礎結構很少需要比組態更新更複雜的變更,因此這些資源應該構成 低觸控 的 IaC 管線。 視工作負載的複雜度而定,您可能有一或多個 中觸控 和高 觸控 IaC 管線的資源。 使用 Kubernetes 型應用程式堆疊作為範例,一個中觸控層可能是由叢集、記憶體資源和資料庫服務所組成。 高觸控層是由持續傳遞模式中經常更新的應用程式容器所組成。

將 IaC 和應用程式程式代碼視為相同。 將 IaC 成品視為與應用程式程式代碼成品相同的,可協助您對所有管線套用相同的管理程式碼。 此外,IaC 開發和部署做法應該鏡像應用程式實務。 版本控制、分支、程式代碼升級和品質的標準應該都相同。 也請考慮將 IaC 資產與應用程式程式代碼資產共置。 這麼做有助於確保每個部署都遵循相同的程式,並協助您避免在必要的應用程式程式代碼之前不小心部署基礎結構之類的問題,反之亦然。

與組織中的其他小組共同作業,以標準化和重複使用性。 大型組織有時可以有多個小組開發和支援工作負載。 跨小組共同作業以同意標準,可協助您重複使用連結庫、範本和模組,以提升工作負載環境的效率與一致性。 同樣地,IaC 工具應該標準化整個組織,以實際執行這項作業。

套用「安全性即程式碼」原則,以確保安全性是部署管線的一部分。 包含弱點掃描和組態強化,作為 IaC 開發程式的一部分。 掃描您的 IaC 存放庫,以取得公開的金鑰和秘密。 使用 IaC 的優點之一是,以安全性為主的小組成員可以在部署之前檢閱程式代碼,以確保安全性已核准發行的組態實際上是部署到生產環境。 如需詳細指引,請參閱 保護開發生命周期的建議

測試例程和非例程活動。 測試部署、組態更新和復原程式,包括部署復原程式。

可變動與不可變的基礎結構

部署可變基礎結構與不可變基礎結構之間的選擇取決於幾個因素。 如果您的工作負載是業務關鍵,最好使用不可變的基礎結構。 同樣地,如果您有以 部署戳記為基礎的成熟基礎結構設計,則使用不可變的基礎結構可能很合理,因為您可以可靠地部署應用程式程式代碼和新基礎結構。 相反地,如果您的 安全部署做法 規定在發生不當部署問題時向前復原是慣用的選項,則使用可變基礎結構是較佳的選擇。 在此情況下,您可能會就地更新基礎結構。

考量事項

增加特製化: 在某些情況下,在工作負載小組中引進新的語言隨附學習曲線,而廠商鎖定可能會讓它成為不佳的選擇。 需要訓練小組成員,並根據雲端提供者的工具支援來分析正確的工具。

增加維護工作: 需要程式代碼基底和工具維護,才能讓您的 IaC 實作保持最新且安全。 適當地追蹤您的技術債務,並培養可獎勵降低貸款的文化特性。

增加設定變更的時間: 使用命令行指示或直接從入口網站部署基礎結構,不需要撰寫程式代碼時間和/或測試成品。 遵循程式代碼檢閱和品質保證實務等建議做法,將部署時間降到最低。

模組化的複雜性增加: 使用更多模組和參數化會增加偵錯和記錄系統所需的時間,並新增一層抽象概念。 平衡模組化的使用,以減少複雜度,並避免過度工程。

Azure 設施

Azure Resource Manager 範本 (ARM 範本) Bicep 是使用宣告式語法部署基礎結構的 Azure 原生工具。 ARM 範本是以 JSON 撰寫,而 Bicep 則是網域特定的語言。 這兩者都可以輕鬆地整合到 Azure 管線,或 GitHub Actions CI/CD 管線。

Terraform 是 Azure 中完全支援的另一個宣告式 IaC 工具。 它可用來部署和管理基礎結構,並可整合到 CI/CD 管線中。

您可以使用 Microsoft Defender for Cloud 來探索 IaC 中的設定錯誤

組織一致性

雲端採用架構 提供中央小組的指引,說明如何將基礎結構標準化為整個組織的工作負載小組的程序代碼。

如需詳細資訊,請參閱 雲端採用架構 中的基礎結構即程序代碼

範例

如需可透過提供 Resource Manager、Bicep 或 Terraform 檔案部署的虛擬桌面實作範例,請參閱 Azure 虛擬桌面登陸區域加速器架構和相關聯的參考實作。

營運卓越檢查清單

請參閱一組完整的建議。