為了達到規模,DevOps 小組一律在尋找使用受信任且可重複的程式快速部署程式碼的方法。 在雲端和基礎結構方面,此程式已透過基礎結構即程式碼 (IaC) 來完成。 IaC 工具的範圍從一般用途工具到適用于特定環境的工具。 Terraform 是先前的範例,而 Bicep 則設計用來處理 Azure 相關工作。
在本文中,我們會比較 Bicep 和 Terraform 的 9 個基礎結構和整合功能。 瞭解這些差異可協助您決定哪些工具最能支援您的基礎結構和程式。
狀態和後端
Terraform 和 Bicep 都是所需的狀態設定 (DSC),可讓您輕鬆地以程式碼管理 IT 和開發基礎結構。 Terraform 會儲存受控基礎結構和設定的相關狀態。 Terraform 會使用這項資訊,將真實世界資源對應至您的組態、追蹤中繼資料,以及改善較大基礎結構的效能。 狀態會儲存在名為 terraform.tfstate
的本機檔案中,但也可以 從 遠端儲存。 備份並保護您的狀態檔案非常重要。 和 Terraform 一樣,Bicep 是宣告式和尋求目標。 不過,Bicep 不會儲存狀態。 相反地,Bicep 依賴累加式部署。
基礎結構目標
比較 Bicep 與 Terraform 來管理雲端基礎結構時,請務必考慮您的目標雲端環境:
Bicep 是 Azure 特定的,並非設計來與其他雲端服務搭配使用。
如果您的目標是將部署自動化至下列任何環境,Terraform 可能是較佳的選項:
- 虛擬化環境
- 多重雲端案例 - 例如 Azure 和其他雲端
- 內部部署工作負載
Terraform 會使用稱為 提供者 的外掛程式與其他雲端提供者或 API 互動。 有數 個 Terraform Azure 提供者 可讓您管理 Azure 基礎結構。 撰寫 Terraform 組態程式碼時,您可以指定所使用的必要提供者。 當您執行 terraform init 時,會安裝指定的提供者,並從您的程式碼使用。
命令列介面 (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 提供許多方便使用的基礎結構和整合功能。 這些功能可讓您更輕鬆地實作和管理自動化技術。 決定哪一個最適合您的環境時,請務必考慮您是否要部署到多個雲端,或您的基礎結構是否包含多或混合式雲端環境。 此外,請務必考慮本文中討論的九項功能,為您的組織做出最佳選擇。
現今的組織面臨需要大量彈性和靈活性的動態挑戰。 公用雲端環境可透過自動化滿足這些需求,特別是透過基礎結構即程式碼 (IaC)。 兩個主要的 IaC 選項是 Hashicorp Terraform 和 Bicep。 Terraform 是開放原始碼工具,可協助 DevOps 專業人員使用宣告式程式碼管理內部部署和雲端服務。 Microsoft Bicep 利用宣告式語法來簡化 Azure 資源的部署。
在本文中,我們會比較數個主要使用者體驗功能,以識別 Terraform 與 Bicep 之間的相似性和差異。
語言語法
Bicep 和 Terraform 是網域特定語言 (DSL),便於使用並節省開發人員時間。 這兩個工具都包含類似的關鍵字和概念。 其中一些概念是參數化、支援多檔案專案,以及支援外部模組。 不過,Terraform 會針對特定工作提供更豐富的內建功能程式庫。 在兩者之間決定是偏好和經驗的問題。 以下是每個語言語法所提供的簡短概觀和一些使用者易記功能。
Bicep 是宣告式語言。 因此,程式碼中定義元素的順序不會影響部署的處理方式。 Bicep 的預設目標範圍是 resourceGroup
。 用戶可以採用變數來封裝複雜的表達式,並讓 Bicep 檔案更容易閱讀。 模組的概念可讓您跨專案或小組重複使用 Bicep 程式代碼。
Terraform 也是使用HashiCorp組態語言 (HCL) 的宣告式語言。 HCL 的主要用途是宣告資源。 其他語言功能可讓定義資源更方便。 如同 Bicep,Terraform 組態檔中的程式代碼順序並不重要。
語言協助程式
Bicep 和 Terraform 都提供 語言協助程式 ,以簡化程式代碼撰寫工作。 由於兩者都方便使用,因此選擇在很大程度上取決於喜好設定和需求。
Bicep 支援表示式,讓您的程式代碼更具動態性和彈性。 不同類型的函式可用於 Bicep 檔案中。 其中有些函式類型是邏輯、數值和反對函式。 迴圈可以定義資源、模組、屬性、變數或輸出的多個複本。 迴圈有助於避免在 Bicep 檔案中重複語法。
Terraform 也提供從表達式內呼叫的內建函式,以轉換和合併值。 如同 Bicep,Terraform 運算式可以包含複雜的運算式,例如資源匯出的數據參考和條件式評估。 迴圈可以處理集合,而且可以產生資源的多個實例,而不需要重複程序代碼。
模組
Bicep 和 Terraform 都支援模組的概念。 模組可讓您從程式代碼建立可重複使用的元件。 模組在調整基礎結構及保持組態保持乾淨方面扮演重要角色。 由於模組會封裝資源群組,因此可減少針對類似基礎結構元件開發的程式代碼數量。 雖然模組在 Bicep 和 Terraform 中的運作方式類似,但在實作中會有所不同。
在 Bicep 中,模組只是從另一個 Bicep 檔案部署的 Bicep 檔案。 Bicep 模組可改善 Bicep 檔案的可讀性。 這些模組也是可調整的。 使用者可以跨小組共用模組,以避免程式碼重複並減少錯誤。 如需定義 Bicep 模組的詳細資訊,請參閱 Bicep 模組。
在 Terraform 中, 模組 是跨小組封裝和重複使用資源設定的主要方法。 Terraform 模組是封裝為單一邏輯單元之多個資源的容器。 模組是由儲存在目錄中的 .tf
和/或 .tf.json
檔案集合所組成。 除了來自本機文件系統的模組之外,Terraform 也可以從各種來源載入模組。 這些來源包括登錄、本機路徑、模組和 GitHub。
布建生命週期
Terraform 和 Bicep 都允許開發人員在部署之前驗證設定,然後套用變更。 Terraform 提供更多彈性,以終結由特定組態管理的所有遠端物件。 這項功能有助於在工作完成後清除暫存物件。 在選擇最佳選項時,請務必考慮一般基礎結構部署的生命週期需求。
Bicep 提供 假設 作業,可讓您在部署 Bicep 檔案之前預覽變更。 Azure Resource Manager 會提供作業, what-if
而且不會對現有資源進行任何變更。 然後,您可以搭配 Bicep 檔案使用 Azure PowerShell 或 Azure CLI,將 資源部署至 Azure。 Azure PowerShell 和 Azure CLI 不支援部署遠端 Bicep 檔案。 不過,您可以使用 Bicep CLI 將 Bicep 檔案建置至 JSON 範本,然後將 JSON 檔案載入遠端位置。
在 Terraform 中 ,terraform plan 命令類似於 Bicep what-if
作業。 terraform plan
使用 命令,您會先建立執行計劃以預覽,再套用它。 然後,您可以透過 terraform apply 命令套用執行計畫。 您與 Terraform 執行的任何動作幾乎都牽涉到同時使用 terraform plan
和 terraform apply
命令。
開始使用
Bicep 和 Terraform 都提供資源來協助您開始使用。 Bicep 的 Learn 課程模組可協助您定義應該如何設定 Azure 資源。 您也會引導您部署數個 Azure 資源,以提供實際操作體驗。
同樣地,HashiCorp Learn 為使用者提供各種 Terraform 訓練資源 ,以教導您如何安裝和使用 Terraform。 這些資源包括說明如何使用 Terraform 在 Azure 上布建基礎結構的資訊。
程式代碼撰寫
程式代碼撰寫體驗取決於您所選編輯器可用的載入宏數目。 幸運的是,Bicep 和 Terraform 都提供資源來改善程式代碼撰寫效率。
針對 Bicep,其中一個最有效的載入宏是 Bicep Visual Studio Code 擴充功能。 此延伸模組提供程式碼驗證、Intellisense、點屬性存取和屬性自動完成等功能。
針對 Terraform,具有 Terraform Language Server 的 Terraform Visual Studio Code 擴充功能提供許多與 Bicep Visual Studio Code 延伸模組相同的功能。 例如,延伸模組也支援語法醒目提示、IntelliSense、程式代碼瀏覽和模組總管。 HashiCorp 在其 GitHub 存放庫上也提供 [https://github.com/hashicorp/terraform-ls/blob/main/docs/USAGE.md詳細安裝指示] 來設定及使用 Terraform Language Server。
Azure 涵蓋範圍
Bicep 在設定 Azure 資源方面,比 Terraform 具有優勢。 Bicep 與 Azure 服務緊密整合。 此外,它可立即支援新的 Azure 功能。 Terraform 提供兩個提供者,可讓使用者管理 Azure:AzureRM 和 AzAPI。 AzureRM 提供者為穩定的 Azure 服務提供完全量身打造的體驗。 有時候,瞭解此量身打造的體驗可能會導致延遲一點。 AzAPI 提供者是 Azure Resource Manager REST API 之上的精簡層,例如 Bicep,可立即支援新的 Azure 功能。 請務必考慮貴組織的基礎結構需求,以及在做出決策之前是否完全支持它們。
社群與支援
社區在幫助學習和克服挑戰方面發揮了關鍵作用。 Terraform 和 Bicep 社群都提供高水平的參與和支援。
針對 Bicep 支援,您前往協助的位置取決於問題的性質:
針對 Terraform 支援,您可以前往何處取得協助,視問題的性質而定:
摘要
Bicep 和 Terraform 是兩個領先的 IaC 選項,可讓您輕鬆地設定及部署 Azure 資源。 兩者都提供方便使用者的功能,可協助組織提升效率和生產力。 評估最適合您的組織時,請仔細考慮您的基礎結構需求和喜好設定。