Terraform 和 Pulumi 是兩個流行的基礎設施即代碼(IaC) 工具,用于配置和管理虛擬環(huán)境。這兩種工具都是開源的,被廣泛使用,并提供類似的功能。但是,如果沒有詳細的比較,要在 Pulumi 和 Terraform 之間進行選擇并不容易。以下是對 Pulumi 和 Terraform 之間主要區(qū)別的檢查。本文分析了哪種工具在實際用例中表現(xiàn)更好,并為高效的軟件開發(fā)生命周期提供了更多價值。
Pulumi 和 Terraform 之間的主要區(qū)別
- Pulumi 沒有特定領域的軟件語言。開發(fā)人員可以使用 Go、.NET、JavaScript 等通用語言在 Pulumi 中構建基礎設施。另一方面,Terraform 使用其 Hashicorp 配置語言。
- Terraform 遵循嚴格的代碼準則。Pulumi 在這方面更加靈活。
- Terraform 有據(jù)可查,并擁有一個充滿活力的社區(qū)。Pulumi 有一個較小的社區(qū),并且沒有記錄。
- Terraform 更容易進行狀態(tài)文件故障排除。
- 由于不使用特定領域的語言,Pulumi 提供了卓越的內置測試支持。
什么是普魯米?
Pulumi 是一個開源 IaC 工具,用于設計、部署和管理云基礎設施上的資源。該工具支持眾多公共、私有和混合云提供商,例如 AWS、Azure、Google Cloud、Kubernetes、phoenixNAP Bare Metal Cloud 和 OpenStack。
Pulumi用于創(chuàng)建傳統(tǒng)的基礎設施元素,例如虛擬機、網(wǎng)絡和數(shù)據(jù)庫。該工具還用于設計現(xiàn)代云組件,包括容器、集群和無服務器功能。
雖然 Pulumi 具有命令式編程語言,但請使用該工具進行聲明式 IaC。用戶定義基礎設施的期望狀態(tài),Pulumi 構建請求的資源。
什么是 Terraform?
Terraform 是一種流行的開源 IaC 工具,用于構建、修改和版本化虛擬基礎架構。
該工具與所有主要的云提供商一起使用。Terraform 用于配置從低級組件(如存儲和網(wǎng)絡)到高端資源(如 DNS 條目)的所有內容。使用 Terraform 構建環(huán)境用戶友好且高效。用戶還可以使用此工具管理多云或多產品環(huán)境。
Terraform 是一個聲明式 IaC 工具。用戶編寫配置文件來描述 Terraform 所需的組件。然后,該工具會生成一個計劃,描述達到所需狀態(tài)所需的步驟。如果用戶同意大綱,Terraform 將執(zhí)行配置并構建所需的基礎架構。
Pulumi 與 Terraform 比較
雖然這兩種工具的用途相同,但 Pulumi 和 Terraform 在幾個方面有所不同。以下是兩種基礎設施即代碼工具之間最顯著的區(qū)別:
1. 與 Terraform 不同,Pulumi 沒有 DSL
要使用 Terraform,開發(fā)人員必須學習一種稱為 Hashicorp 配置語言 (HCL) 的領域特定語言 (DSL)。HCL 以易于上手但難以精通而著稱。
相比之下,Pulumi 允許開發(fā)人員使用通用語言,例如 JavaScript、TypeScript、.Net、Python 和 Go。熟悉的語言允許熟悉的構造,例如 for 循環(huán)、函數(shù)和類。所有這些功能也可通過 HCL 獲得,但它們的使用需要使語法復雜化的變通方法。
缺乏特定領域的語言是 Pulumi 的主要賣點。通過允許用戶堅持他們所知道的,Pulumi 減少了樣板代碼并鼓勵最佳編程實踐。
2. 不同類型的狀態(tài)管理
使用 Terraform,狀態(tài)文件默認存儲在本地硬盤的terraform.tfstate文件中。使用Pulumi,用戶在官網(wǎng)注冊一個免費賬戶,狀態(tài)文件在線存儲。
通過使用戶能夠通過免費帳戶存儲狀態(tài)文件,Pulumi 提供了許多功能。所有資源都有詳細的概述,用戶可以深入了解他們的部署歷史。每個部署都提供了對配置詳細信息的分析。這些功能可實現(xiàn)高效的管理、查看和監(jiān)控活動。
要使用 Terraform 享受類似的好處,您必須擺脫默認的本地硬盤驅動器設置。為此,請使用 Terraform Cloud 帳戶或依賴第三方云存儲提供商。最多五個用戶的小型團隊可以獲得免費版本的 Terraform Cloud。
Pulumi 需要付費帳戶才能與多個開發(fā)人員進行任何設置。Pulumi 的付費版本提供額外的好處。其中包括團隊共享功能、Git 和 Slack 集成,以及對將 IaC 工具集成到 CI/CD 部署中的功能的支持。團隊帳戶還啟用狀態(tài)鎖定機制。
3. Pulumi 提供更多代碼通用性
定義基礎架構后,Terraform 將引導用戶進行所需的聲明性配置。代碼總是干凈而簡短。當您嘗試實現(xiàn)某些條件情況時會出現(xiàn)問題,因為 HCL 在這方面受到限制。Pulumi 允許用戶使用標準編程語言編寫代碼,因此可以使用多種方法來達到所需的參數(shù)。
4. Terraform 更擅長構建大型項目
Terraform 允許用戶將項目拆分為多個文件和模塊以創(chuàng)建可重用的組件。Terraform 還使開發(fā)人員能夠為不同的環(huán)境和目的重用代碼文件。
Pulumi 將基礎設施構建為單一項目或微型項目。不同的堆棧充當不同的環(huán)境。當使用映射到多個資源的更高級別的 Pulumi 擴展時,沒有辦法將堆棧引用反序列化回資源。
5. Terraform 提供更好的狀態(tài)文件故障排除
使用 IaC 工具時,不可避免地會遇到損壞或不一致的狀態(tài)。崩潰通常會導致更新期間的不一致狀態(tài)、錯誤或由錯誤的手動更改引起的漂移。
Terraform 提供了幾個用于處理損壞或不一致狀態(tài)的命令:
refresh
?通過使用真實的基礎設施狀態(tài)調整已知狀態(tài)來處理漂移。state {rm,mv}
?用于手動修改狀態(tài)文件。import
?找到現(xiàn)有的云資源并將其導入您的狀態(tài)。taint/untaint
?將單個資源標記為需要娛樂。
Pulumi 還提供了幾個 CLI 命令以防損壞或不一致的狀態(tài):
refresh
?與 Terraform 的刷新方式相同。state delete
?從狀態(tài)文件中刪除資源。
Pulumi 沒有taint/untaint
.?對于任何失敗的更新,用戶需要手動編輯狀態(tài)文件。
6. Pulumi 提供更好的內置測試
由于 Pulumi 使用通用編程語言,該工具支持使用用戶選擇的軟件語言支持的任何框架進行單元測試。對于集成,Pulumi 僅支持在 Go 中編寫測試。Terraform 不提供官方測試支持。要測試 IaC 環(huán)境,用戶必須依賴第三方庫,例如Terratest和Kitchen-Terraform。
7. Terraform 有更好的文檔和更大的社區(qū)
與 Terraform 相比,Pulumi 官方文檔仍然有限。該工具的最佳資源是在 GitHub 和 Pulumi Slack 上找到的示例。
社區(qū)的規(guī)模在有用的資源方面也起著重要作用。多年來,Terraform 一直是一種廣泛使用的 IaC 工具,因此它的社區(qū)隨著它的流行而發(fā)展壯大。Pulumi 的社區(qū)還遠沒有達到這個規(guī)模。
8. 部署到云端
Pulumi 允許用戶從本地設備將資源部署到云端。默認情況下,Terraform 需要使用其 SaaS 平臺將組件部署到云中。
如果用戶希望使用 Terraform 從本地設備進行部署,AWS_ACCESS_KEY
則AWS_SECRET_ACCESS_KEY
需要將變量添加到 Terraform Cloud 環(huán)境中。此過程不適合 Amazon Web Services (AWS) 的聯(lián)合 SSO 帳戶。對有權訪問您的云的第三方系統(tǒng)的安全問題也值得注意。
常見的解決方法是僅使用 Terraform Cloud 來存儲狀態(tài)信息。但是,此選項是以犧牲其他 Terraform Cloud 功能為代價的。
緬甸語 | 地形 | |
---|---|---|
出版商 | 緬甸語 | 哈希公司 |
方法 | 推 | 推 |
IAC 方法 | 聲明式 | 聲明式 |
價錢 | 一個用戶免費,團隊三個付費套餐 | 最多五個用戶免費,大型團隊兩個付費套餐 |
寫在 | 打字稿,Python,圍棋 | 走 |
資源 | 打開 | 打開 |
領域特定語言 (DSL) | 不 | 是(Hashicorp 配置語言) |
主要優(yōu)勢 | 以熟悉的編程語言編寫代碼,出色的開箱即用 GUI | 純聲明式 IaC 工具,可與所有主要云提供商合作,讓您創(chuàng)建基礎架構構建塊 |
主要缺點 | 仍然未完善,缺少文件的地方 | HCL 限制了編碼自由度,需要掌握才能使用高級功能 |
狀態(tài)文件管理 | 狀態(tài)文件通過免費帳戶存儲 | 狀態(tài)文件默認存儲在本地硬盤上 |
社區(qū) | 中號 | 大 |
便于使用 | JavaScript、TypeScript、.Net、Python 和 Go 的使用讓 IaC 變得熟悉 | HCL 是一種復雜的語言,盡管語法簡潔 |
模塊化 | 高級 Pulumi 擴展存在問題 | 可重復使用的組件是理想的選擇 |
文檔 | 有限,在 Pulumi Slack 和 GitHub 上有最好的資源 | 優(yōu)秀的官方文檔 |
代碼通用性 | 當用戶用不同的語言編寫代碼時,有多種方法可以達到所需的狀態(tài) | HCL 幾乎沒有多功能性的空間 |
部署到云端 | 可以從本地設備完成 | 必須通過SaaS平臺完成 |
測試 | 使用支持所用編程語言的任何框架進行測試 | 必須通過第三方工具執(zhí)行 |
一起使用 Pulumi 和 Terraform
可以同時使用 Pulumi 和 Terraform 運行 IaC。但是,使用這兩種工具需要一些解決方法。Pulumi 支持從 Pulumi 程序中使用本地或遠程 Terraform 狀態(tài)。如果您決定繼續(xù)使用 Terraform 管理虛擬基礎架構的子集,這種支持有助于逐步采用 Pulumi。
例如,您可能決定將您的 VPC 和低級網(wǎng)絡定義保留在 Terraform 中,以避免中斷基礎設施。使用狀態(tài)參考支持,您可以使用 Pulumi 設計高級基礎設施,并且仍然使用 Terraform 支持的 VPC 信息。在這種情況下,Pulumi 和 Terraform 的共存很容易管理和自動化。
結論:兩者都是偉大的基礎設施作為代碼工具
Terraform 和 Pulumi 都提供類似的功能。Pulumi 是一個不太嚴格的工具,專注于功能。Terraform 更成熟,文檔更完善,并擁有強大的社區(qū)支持。然而,Pulumi 的不同之處在于它與 DevOps 文化的契合。
通過用流行的編程語言表達基礎設施,Pulumi 彌合了 Dev 和 Ops 之間的差距。它在開發(fā)和運營團隊之間提供了一種通用語言。相比之下,Terraform 加強了跨部門的孤島,使用其特定領域的語言將開發(fā)和運營團隊進一步分開。從這個角度來看,Pulumi 更適合在整個開發(fā)生命周期中標準化DevOps 管道。該工具增強了一致性,并導致更快的軟件開發(fā)和更少的錯誤空間。