基礎結構即程序代碼 (IaC) 是重要的 DevOps 做法,涉及在描述性模型中管理基礎結構,例如網路、計算服務、資料庫、記憶體和聯機拓撲。 IaC 可讓團隊更快速地開發和發行變更,並更有信心。 IaC 的優點包括:
- 提升對部署的信心
- 管理多個環境的能力
- 改善基礎結構狀態的瞭解
如需使用基礎結構即程式代碼的優點詳細資訊,請參閱 可重複的基礎結構。
工具製造
實作基礎結構即程序代碼時,有兩種方法可以採用。
- 命令式基礎結構即程式代碼 牽涉到以Bash或PowerShell等語言撰寫腳本。 您明確表示執行以產生所需結果的命令。 當您使用命令式部署時,您必須管理相依性、錯誤控制和資源更新的順序。
- 宣告式基礎設施即代碼 是指撰寫定義來描述您希望環境呈現的樣子。 在此定義中,您會指定想要的結果,而不是想要達成該結果的方法。 此工具會找出如何藉由檢查目前狀態、將其與目標狀態進行比較,然後套用差異,來產生結果。
ARM 範本
檢閱 Azure Resource Manager 範本的相關信息(ARM 範本)。
二頭肌
Bicep 是一種網域特定語言 (DSL),使用宣告式語法來部署 Azure 資源。 在 Bicep 檔案中,您會定義您想要部署的基礎結構及其屬性。 相較於 ARM 範本,Bicep 檔案更容易為非開發人員對象讀取和寫入,因為它們使用簡潔的語法。
此範例 Bicep 程式代碼會在資源群組的區域部署 Azure 記憶體帳戶。 它會套用 Standard_LRS 備援和 StorageV2 種類。 存取層會設定為「熱存取」,以供經常存取數據。
param location string = resourceGroup().location
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-06-01' = {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
}
Terraform(星體改造技術)
檢閱 Terraform 的相關信息。
Azure 命令列介面 (Azure CLI)
檢閱 Azure CLI 的相關信息。
基礎結構即程式代碼模組
使用程式代碼部署基礎結構的其中一個目標是避免重複工作,或針對相同或類似用途建立多個範本。 基礎結構模組應該可重複使用且具有彈性,而且應該有明確的用途。
模組是獨立的檔案,通常包含一組要一起部署的資源。 模組可讓您將複雜的範本分成較小的、更容易管理的程式代碼集。 您可以確定每個模組都著重於特定工作,而且所有模組都可供多個部署和工作負載重複使用。
Bicep 模組
Bicep 可讓您建立和呼叫模組。 建立模組之後,即可從任何其他 Bicep 範本取用它們。 高品質的 Bicep 模組應該定義多個相關資源。 例如,當您定義 Azure 函式時,通常會部署特定應用程式、該應用程式的裝載方案,以及該應用程式元數據的記憶體帳戶。 這些元件會個別定義,但它們會形成資源的邏輯群組,因此您應該考慮將它們一起定義為模組。
Bicep 模組通常使用:
- 接受呼叫模組值的參數。
- 將結果傳回呼叫模組的輸出值。
- 定義模組所要管理之一或多個基礎結構對象的資源。
發佈 Bicep 模組
您有數個選項可用來發佈和共用 Bicep 模組。
- 公用登錄: 公用模組登錄裝載於Microsoft容器登錄 (MCR) 中。 其原始程式碼及其所包含的模組會儲存在 GitHub 中。
- 私人登錄: 您可以使用 Azure 容器登錄將模組發佈至私人登錄。 如需將模組發佈至 CI/CD 管線中登錄的資訊,請參閱 Bicep 和 GitHub Actions,或如果您偏好 Bicep 和 Azure Pipelines。
- 範本規格: 您可以使用 範本規格 來發佈 Bicep 模組。 範本規範通常是完整的範本,但 Bicep 允許您使用範本規範來部署模組。
- 版本控制系統: 您可以直接從 GitHub 或 Azure DevOps 等版本控制工具載入模組。
Terraform 模組
Terraform 可讓您建立和呼叫模組。 每個 Terraform 組態至少有一個模組,稱為其 根模組,包含主工作目錄中檔案中 .tf
定義的資源。 每個模組都可以呼叫其他模組,這可讓您在主要組態檔中包含子模組。 模組也可以在相同組態內呼叫多次,或從不同的組態呼叫。
模組會使用所有相同的組態語言概念來定義。 他們最常使用:
- 輸入變數 以接受來自呼叫模組的值。
- 將結果傳回呼叫模組的輸出值。
- 定義模組所要管理之一或多個基礎結構對象的資源。
發佈 Terraform 模組
您有數個選項可用來發佈和共用 Terraform 模組:
- 公用登錄: HashiCorp 有自己的 Terraform 模組登錄,可讓用戶產生可共用的 Terraform 模組。 目前在 Terraform Module Registry 中發行了數個 Azure 模組 。
- 私人登錄: 您可以將 Terraform 模組順暢地發佈至私人存放庫,例如 Terraform Cloud Private Registry 或 Azure Container Registry。
- 版本控制系統: 您可以直接從 GitHub 等版本控制工具載入私人模組。 如需支援的來源資訊,請參閱 Terraform 模組來源。
設計考量
將登陸區域資源部署到 Azure 時,請考慮使用 IaC。 IaC 完全實現部署優化、減少設定工作,並將整個環境的部署自動化。
判斷您是否應該採用命令式或宣告式 IaC 方法。
如果採取命令式方法,則明確表示要執行的命令,以產生您所需的結果。
如果採用宣告式方法,請指定您想要達成的結果,而不是達成結果的方式。
請考慮部署範圍。 深入瞭解 Azure 管理層級和階層。 每個 IaC 部署都必須知道部署 Azure 資源的範圍。
判斷您是否應該使用 Azure 原生或 Azure 非原生 IaC 工具。 考慮事項:
Microsoft完全支援 Azure CLI、ARM 範本和 Bicep 等 Azure 原生工具,讓新功能能夠更快速地整合。
Terraform 之類的非原生工具可讓您跨 AWS 或 GCP 等多個雲端提供者管理基礎結構即程序代碼。 不過,新的 Azure 功能可能需要一些時間才能包含在非原生中。 如果您的組織是多雲端環境,或已經使用並精通 Terraform,請考慮使用 Terraform 來部署 Azure 登陸區。
由於模組可讓您將複雜的範本分成較小的程式代碼集,請考慮針對通常一起部署的資源使用 IaC 模組。 您可以確保每個模組都專注於特定任務,並且可以重複使用於多個部署和工作負載。
請考慮在公用登錄、私人登錄或 Git 存放庫之類的版本控制系統之間選擇 IaC 模組的發布策略。
請考慮針對 IaC 部署使用 CI/CD 管線。 管線會強制執行您設定的可重複使用程式,以確保部署和 Azure 環境的品質。
設計建議
採用 IaC 方法來部署、管理、控管和支援 Azure 登陸區域部署。
在下列案例中使用適用於 IaC 的 Azure 原生工具:
您想要只使用 Azure 原生工具。 您的組織可能有先前的 ARM 或 Bicep 範本部署體驗。
您的組織想要立即支援所有預覽版和 GA 版本的 Azure 服務。
在下列情境中使用一些非原生工具進行 IaC:
您的組織目前使用 Terraform 將基礎結構部署到 AWS 或 GCP 等其他雲端。
您的組織不需要立即支援所有預覽和 GA 版本的 Azure 服務。
使用可重複使用的 IaC 模組來避免重複的工作。 您可以跨組織共用模組,以部署多個專案或工作負載,並管理較不複雜的程序代碼。
在下列案例中,從公用登錄發佈和使用 IaC 模組:
您想使用已發佈至公開註冊表的模組來建立 Azure 登陸區域。 如需詳細資訊,請參閱 Azure 登陸區域 Terraform 模組。
您想要使用Microsoft、Terraform或其他模組提供者所維護、更新和支持的模組。
- 請確定您檢查任何您評估的模組提供者的支援聲明。
在下列案例中,從私人登錄或版本控制系統發佈和使用 IaC 模組:
您想要根據組織需求建立自己的模組。
您想要完全控制所有功能,以及維護、更新及發佈新版本的模組。
使用 CI/CD 管線來部署 IaC 成品,並確保部署和 Azure 環境的品質。