為了達到規模,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 時,指定的 provider 會被安裝,並且可以在程式碼中使用。
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 程式代碼,以及建立並套用執行計劃。
- 快速入門:使用 Terraform 建立 Azure 資源群組一文說明如何使用數個 Terraform 命令來建立 Azure 資源群組。
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 相同的入口網站整合,但可以使用 Azure 專為 Terraform 設計的匯出工具,將現有的 Azure 基礎結構納入 Terraform 的管理。 (適用於 Terraform 的 Azure 匯出是 Azure/aztfexport GitHub 存放庫上由 Microsoft 擁有和維護的開放原始碼工具。)
頻外變更
頻外組態變更是在工具內容之外對裝置組態所做的變更。 例如,假設您使用 Bicep 或 Terraform 部署虛擬機器規模設定組。 如果您使用入口網站變更該虛擬機擴展集,則變更會「頻外」,且您的 IaC 工具未知。
如果您使用 Bicep,頻外變更應該與 Bicep 和 ARM 範本程式碼協調,以避免在下一個部署上覆寫這些變更。 這些變更不會封鎖部署。
如果您使用 Terraform,則必須將頻外變更匯入 Terraform 狀態,並更新 HCL。
因此,如果環境涉及頻外頻繁的變更,Bicep 會更方便使用。 當您使用 Terraform 時,應該將頻外變更降至最低。
雲端架構
雲端採用架構 (CAF) 是檔、最佳做法和工具的集合,可在整個雲端旅程中加速雲端採用。 Azure 提供原生服務來部署登陸區域。 Bicep 使用以 ARM 範本和著陸區實作為基礎的入口網站來簡化此流程。 Terraform 會利用 Enterprise-Scale 登陸區域模組 來部署、管理及運作 Azure。
總結
Bicep 和 Terraform 提供許多使用者友好的基礎結構和整合功能。 這些功能可讓您更輕鬆地實作和管理自動化技術。 決定哪一個最適合您的環境時,請務必考慮您是否要部署到多個雲端,或您的基礎結構是否包含多或混合式雲端環境。 此外,請務必考慮本文中討論的九項功能,為您的組織做出最佳選擇。