分享方式:


基礎結構即程式碼

基礎結構即程式碼 (IaC) 是一個重要 DevOps 做法,涉及在描述性模型中管理基礎結構,例如網路、計算服務、資料庫、儲存體和連線拓撲。 IaC 可讓小組更快速且更有信心地開發及發行變更。 IaC 的優點包括:

  • 增加部署的信賴度
  • 管理多個環境的能力
  • 改善基礎結構狀態的瞭解

如需使用基礎結構即程式碼的優點詳細資訊,請參閱 可重複的基礎結構

Tooling

實作基礎結構即程式碼時,有兩種方法可以採取。

  • 命令式基礎結構即程式碼 牽涉到以 Bash 或 PowerShell 等語言撰寫腳本。 您明確指出執行以產生所需結果的命令。 當您使用命令式部署時,您可以管理相依性、錯誤控制和資源更新的順序。
  • 宣告式基礎結構即程式碼 牽涉到撰寫定義您要環境外觀的定義。 在此定義中,您會指定所需的結果,而不是您想要完成的結果。 此工具可找出如何藉由檢查您目前的狀態、將其與目標狀態進行比較,然後套用差異,來達成結果。

ARM 範本

檢閱 azure Resource Manager 範本的相關資訊, (ARM 範本) 。

Bicep

Bicep 是使用宣告式語法來部署 Azure 資源的特定領域語言 (DSL)。 在 Bicep 檔案中,您可以定義您想要部署的基礎結構及其屬性。 相較于 ARM 範本,Bicep 檔案更容易讀取和寫入非開發人員物件,因為它們使用簡潔的語法。

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 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 範本部署體驗。

    • 您的組織想要立即支援所有 Azure 服務的預覽和 GA 版本。

  • 在下列案例中,針對 IaC 使用非原生工具:

    • 您的組織目前使用 Terraform 將基礎結構部署到 AWS 或 GCP 等其他雲端。

    • 您的組織不需要立即支援所有 Azure 服務的預覽和 GA 版本。

  • 使用可重複使用的 IaC 模組來避免重複的工作。 您可以跨組織共用模組,以部署多個專案或工作負載,以及管理較不復雜的程式碼。

  • 在下列案例中,從公用登錄發佈和使用 IaC 模組:

    • 您想要針對已發佈至公用登錄的 Azure 登陸區域使用模組。 如需詳細資訊,請參閱 Azure 登陸區域 Terraform 模組

    • 您想要使用 Microsoft、Terraform 或其他模組提供者所維護、更新和支援的模組。

      • 請確定您從您評估的任何模組提供者檢查支援語句。
  • 在下列案例中,從私人登錄或版本控制系統發佈和使用 IaC 模組:

    • 您想要根據組織需求建立自己的模組。

    • 您想要完全控制所有功能和維護、更新及發佈新版本的模組。

  • 使用 CI/CD 管線來部署 IaC 成品,並確保部署和 Azure 環境的品質。