Terraform與其他工具對比

teachmyself發表於2019-02-18

Terraform 提供了一個資源和服務商的靈活的抽象層。該模型允許可以表示從物理硬體,虛擬機器和容器到郵件和DNS提供商的所有資訊。因為靈活性,Terraform 可以被用於解決許多不同的問題。這意味著許多已存在的工具與Terraform功能重疊。我們對比了Terraform和大量此類工具,但是需要注意到Terraform與其他系統並不是互斥的。它可以被用來管理單個應用程式或整個資料中心。

使用左邊的導航來閱讀Terraform與其他特定系統對比。

Terraform與Chef,Puppet等

配置管理工具在已存在的機器上安裝和管理軟體。Terraform不是一個配置管理工具,並且它允許現有的工具專注於自己的優勢:引導和初始化資源。

使用provisioners,在資源被建立以後,Terraform可以使任意配置管理工具可以被用於配置和初始化資源。Terraform專注於資料中心和相關服務的更高層次的抽象,而不犧牲配置管理工具來做他們最擅長事情的能力。它也擁抱這些工具所負責的成功編排,使整個基礎設施的部署簡單可靠。

Terraform與CloudFormation, Heat等

像 CloudFormation, Heat這樣的工具。允許將基礎設施的細節編寫為配置檔案。配置檔案允許基礎設施被彈性建立,修改和銷燬。Terraform 受其所解決問題的啟發。

Terraform同樣使用配置檔案配置基礎設施細節,但是它更進一步與雲平臺無關並且能夠結合多provider和多服務編排。例如:Terraform可以同時編排AWS和OpenStack叢集,開啟第三方provider像Cloudflare和DNSimple整合CDN和DNS服務。這使Terraform可以利用其支援的服務來表現和管理整個基礎設施,而不是僅僅已存在於單個provider裡的子集。它提供一種統一的語法,而不是需要運維為每個平臺和服務使用獨立且不可相互互動的工具。

Terraform通過使用執行計劃的概念將計劃語法和執行階段分開。通過執行terraform plan,更新當前狀態並查詢配置檔案生成新的執行計劃。該計劃包含所有將要被執行的動作:將被建立,銷燬和變更的資源。運維可以檢查其狀態以確保其符合預期。使用terraform graph,該計劃將被視覺化並按順序輸其出依賴關係。一旦計劃被獲取,執行語法會被限制在計劃中的動作內。其他工具將計劃和執行階段結合在一起,這意味著運維人員被迫在心裡推斷變更帶來的影響,這在一個大型基礎架構中會很快變得難以追溯。Terraform讓運維人員有信心應用變更,因為他們事前可以確切知道將會發生什麼。

Boto,Fogd等

像Boto, Fog這樣的庫,被用於原生訪問雲提供商和服務所提供的API。一些庫強制專注於特定的雲,有些則嘗試打通所有的雲並隱藏於以上的不同。使用客戶端工具僅提供對於API的低階訪問,需要應用程式開發者建立他們自己的工具來構建和管理他們的基礎設施。

Terraform不打算提供對於提供商的低階程式設計訪問,而已提供一個高階語法來描述雲資源和服務如何被建立,製備和結合。Terraform非常靈活,使用一個基於外掛的模型支援providers和provisioners,賦予它支援幾乎所有服務API的能力。

自定義解決方案

Terraform的設計旨在解決這些挑戰。它提供了一個簡單,統一的語法,允許管理幾乎任意資源而不需要學習一個新工具。通過捕獲所有資源,他們之間的依賴關係可以被自動解決,所以運維人員不需要記住和推理。消除構建工具的負擔使運維人員專注於他們的基礎設施而不是工具。

此外,Terraform是一款開源工具。除了HashiCorp公司,Terraform社群也在幫助擴充套件它的功能,修復bug,完善文件和使用案例。Terraform幫助解決每個組織都存在的一個問題並提供一種適用的標準以避免不同組織間重複造輪子。它的開源特性確保它可以長遠發展。

<!– more –>

<!–//
硬啃官方文件產物,若有不妥之處,歡迎指正,請以官方文件為準!
//–>

相關文章