比較 Terraform 和 Bicep

為了達到規模,DevOps 小組一律在尋找使用受信任且可重複的程式快速部署程式碼的方法。 在雲端和基礎結構方面,此程式已透過基礎結構即程式碼 (IaC) 來完成。 IaC 工具的範圍從一般用途工具到適用于特定環境的工具。 Terraform 是先前的範例,而 Bicep 則設計用來處理 Azure 相關工作。

在本文中,我們會比較 Bicep 和 Terraform 的 9 個基礎結構和整合功能。 瞭解這些差異可協助您決定哪些工具最能支援您的基礎結構和程式。

狀態和後端

Terraform 和 Bicep 都是所需的狀態設定 (DSC),可讓您輕鬆地以程式碼管理 IT 和開發基礎結構。 Terraform 會儲存受控基礎結構和設定的相關狀態。 Terraform 會使用這項資訊,將真實世界資源對應至您的組態、追蹤中繼資料,以及改善較大基礎結構的效能。 狀態會儲存在名為 terraform.tfstate 的本機檔案中,但也可以 遠端儲存。 備份並保護您的狀態檔案非常重要。 和 Terraform 一樣,Bicep 是宣告式和尋求目標。 不過,Bicep 不會儲存狀態。 相反地,Bicep 依賴累加式部署。

基礎結構目標

比較 Bicep 與 Terraform 來管理雲端基礎結構時,請務必考慮您的目標雲端環境:

  • 僅限 Azure
  • 多重或混合式雲端

Bicep 是 Azure 特定的,並非設計來與其他雲端服務搭配使用。

如果您的目標是將部署自動化至下列任何環境,Terraform 可能是較佳的選項:

  • 虛擬化環境
  • 多重雲端案例 - 例如 Azure 和其他雲端
  • 內部部署工作負載

Terraform 會使用稱為 提供者 的外掛程式與其他雲端提供者或 API 互動。 有數 個 Terraform Azure 提供者 可讓您管理 Azure 基礎結構。 撰寫 Terraform 組態程式碼時,您可以指定所使用的必要提供者。 當您執行 terraform init 時,會安裝指定的提供者,並從您的程式碼使用。

CLI 工具

命令列介面 (CLI) 工具透過自動化技術的實作和管理,在協調流程中扮演重要角色。 Bicep 和 Terraform 都提供 CLI 工具。

Bicep 與 Azure CLI 整合,可讓開發人員使用 az 下列命令:

  • az bicep:az bicep 命令可讓您執行安裝 Bicep,以及建置和發佈 Bicep 檔案等工作。
  • az deployment:如何使用 Bicep 和 Azure CLI 部署資源一文 說明如何使用 Azure CLI 搭配 Bicep 檔案將資源部署至 Azure。

Terraform CLI 可讓您執行這類工作,例如驗證和格式化您的 Terraform 程式碼,以及建立並套用執行計畫。

Bicep 也提供一項功能,可讓您輕鬆地整合 Bicep 與 Azure Pipelines。 Terraform 有類似的功能,但您必須下載並安裝適用于 Visual Studio Azure Pipelines Terraform 工作延伸模組。 安裝之後,您可以從 Azure Pipelines 執行 Terraform CLI 命令。 此外,Terraform 和 Bicep 都支援 GitHub Actions ,以自動化軟體組建、測試和部署。

正在處理

Bicep 和 Terraform 在部署的效率與優化方面,有一些重要的差異。 Bicep 會在核心 Azure 基礎結構服務端內進行處理。 這項功能提供檢查原則或可用性以在區域內部署多個實例的預檢處理等優點。 使用 Terraform 時,處理會在 Terraform 用戶端內完成。 因此,前置處理不需要呼叫 Azure,因為它會使用狀態和 HCL (HashiCorp Language) 來判斷所需的變更。

驗證

Azure 驗證功能會因 Bicep 和 Terraform 而有所不同。 使用 Bicep 時,會在提交 Bicep 檔案和 ARM 範本的要求期間提供授權權杖。 ARM 可確保您有權在指定的範本內建立部署和部署資源。 Terraform 會根據提供者認證來驗證每個 API,例如 Azure CLI、服務主體或 Azure 資源的 受控識別。 此外,可以在單一組態中使用多個提供者認證。

Azure 整合

您也應該考慮使用 Azure 功能,例如 Azure 原則 ,以及每個功能如何與其他工具和語言互動。 Bicep 的預檢驗證會判斷資源是否符合原則,使其在部署之前失敗。 因此,開發人員可以使用提供的 ARM 範本,利用原則來補救資源。 ARM 範本可用來建立另一個資源的原則指派,以進行自動化補救。 不過,Terraform 會在因為原則而不允許的資源部署時失敗。

入口網站整合

Bicep 超過 Terraform 的主要優點之一是能夠自動化入口網站動作。 透過 Bicep,您可以使用Azure 入口網站匯出範本。 匯出範本可協助您瞭解部署資源的語法和屬性。 您可以從匯出的範本開始,將未來的部署自動化,並加以修改以符合您的需求。 在支援 Terraform 範本之前,您必須手動翻譯匯出的範本。

雖然 Terraform 並未提供與 Bicep 相同的入口網站整合,但可以使用適用于 Terraform 的 Azure 匯出,在 Terraform 管理下採用現有的 Azure 基礎結構。 (適用于 Terraform 的 Azure 匯出是 Microsoft 在 上 擁有和維護的開放原始碼工具Azure/aztfexport GitHub 存放庫 。)

頻外變更

頻外組態變更是在工具內容之外對裝置組態所做的變更。 例如,假設您使用 Bicep 或 Terraform 部署虛擬機器擴展集。 如果您使用入口網站變更該虛擬機器擴展集,則變更會「頻外」,且您的 IaC 工具未知。

如果您使用 Bicep,頻外變更應該與 Bicep 和 ARM 範本程式碼協調,以避免在下一個部署上覆寫這些變更。 這些變更不會封鎖部署。

如果您使用 Terraform,則必須將頻外變更匯入 Terraform 狀態,並更新 HCL。

因此,如果環境涉及頻外頻繁的變更,Bicep 會更方便使用。 當您使用 Terraform 時,應該將頻外變更降至最低。

雲端架構

雲端採用架構 (CAF) 是檔、最佳做法和工具的集合,可在整個雲端旅程中加速雲端採用。 Azure 提供原生服務來部署登陸區域。 Bicep 會使用以 ARM 範本和登陸區域實作為基礎的入口網站體驗來簡化此程式。 Terraform 利用 企業級登陸區域模組 來部署、管理及運作 Azure。

摘要

Bicep 和 Terraform 提供許多方便使用的基礎結構和整合功能。 這些功能可讓您更輕鬆地實作和管理自動化技術。 決定哪一個最適合您的環境時,請務必考慮您是否要部署到多個雲端,或您的基礎結構是否包含多或混合式雲端環境。 此外,請務必考慮本文中討論的九項功能,為您的組織做出最佳選擇。