天天看點

IaC之Terraform 與Pulumi使用對比一 簡介二 功能三 支援範圍四 通用性五 結論

在iac(Infarftruce As Code)方面,老将Terraform已經利用yaml獨領風騷很長時間,新軍pulumi以其獨到的代碼實作資源編排一出場就光芒四射,對于不同場景,不同公司組織架構,以及不同的廠商範圍,可以參考以下内容進行檢視其差別。

概念:Terraform 是 Hashicorp 公司開源的一種多雲資源編排工具。使用者通過一種特定的配置語言(HCL, Hashicorp Configuration Language)來描述基礎設施,由 Terraform 工具統一解析,建構資源之間的關系,生成執行計劃,并通過調用各家雲廠商的具體實作來完成整個基礎設施生命周期的管理。

語言特性:聲明式語言描述資源清單,代碼不容易複用,對于yaml文法處理循環,條件判斷,以及對字元串做處理等各種工作,而 terraform 在這一塊的表現力太弱,使得代碼寫起來非常冗長,很多時候不得不複制粘貼。

狀态管理困難:狀态管理是 terraform 使用者體驗非常差的一環,由于沒有提供相應的功能,客戶隻能自己在開源社群裡找解決方案;

可視化:狀态的展示,部署的過程其實都可能做很多可視化的事情,讓整體體驗更好一些,減少 devOps 犯錯。然而,terraform 并沒有做這方面的支援。

生态:生态完善,國内例如阿裡/騰訊/華為/Ucloud/百度雲等都支援,國外的基本都支援。

DevOPS:需要單獨內建到CI/CD中,配合其實作資源編排。

概念:Pulumi是一個最新的基礎設施即代碼平台,他包含CLI、運作時、運作庫、和一個托管服務,提供了一種強大的調配,更新和管理雲基礎架構的方式。 Pulumi替代了YAML或特定領域語言(DSL),而利用了現有的,熟悉的程式設計語言,包括TypeScript,JavaScript,Python,Go和.NET,以及它們的本機工具,庫和包管理器。

語言特性:利用程式設計語言描述資源清單,容易編寫類複用等,程式設計語言對于循環,判斷處理具備良好的支援,且代碼量很少,代碼表現力強。

狀态管理:由于使用各開發語言實作,可以非常友善的在代碼裡面使用各類資料庫進行資料操作。

可視化:可以注冊pulumi網站,可視化管理。

生态:生态處于發展階段,國内目前僅阿裡/支援,國外的基本都支援。

DevOPS,直接在語言中實作,非常友善将業務邏輯代碼和資源編排存放在代碼庫,适合于GitOPS。

IaC之Terraform 與Pulumi使用對比一 簡介二 功能三 支援範圍四 通用性五 結論
IaC之Terraform 與Pulumi使用對比一 簡介二 功能三 支援範圍四 通用性五 結論

從上述兩款産品的provider來看,Terraform的國内雲廠商和支援的範圍更廣,pulumi國外支援的多,國内目前僅阿裡有。

terraform使用HCL來的yaml來描述資源清單,雖然統一,但是對于負責場景編排,很難用yaml語言描述,且開發人員需要單獨學習yaml文法。

pulumi使用各類研發人員熟悉的開發語言來描述資源清單,可謂下一代IaC,不用開發人員來單獨學習yaml文法,使用自己熟悉的語言來描述需要的清單即可,但是目前适配國内公有雲不是很多,如果在範圍内可以考慮。

根據以上内容,terraform适應于多雲內建場景,有更多的支援範圍,但是對于語言實作和狀态存儲較為弱,需要單獨學習yaml文法,适應于有單獨Devops運維部門。

pulumi程式員更為喜歡,可以使用各種程式設計語言來做資源編排,但是适應場景目前仍處于發展階段,創新性的公司沒有運維,或運維很少非常适合,在未來pulumi适應更多的支援範圍,配合serverless無縫結合,相信會有更好的場景實踐。