Terraform - Infrastructure as Code什麼是 Terraform編程
Terraform 是一個安全、高效地部署、更改、版本化基礎設施和應用程序的工具,能夠用來管理多層次的資源。從上層的軟件配置到底層的網絡、系統配置均可以使用 Terraform 統一進行管理。安全
Terraform 用配置文件來描述一個應用。 Terraform 會將配置文件與當前環境對比後,生成一個執行計劃,這個計劃會列出爲了達到配置文件中定義的狀態所須要執行的操做,而後執行計劃以達到指望的狀態。服務器
Terraform 經過插件機制管理不一樣的資源提供者,以此來接入各類資源,如虛擬機,存儲,網絡和各類應用服務。網絡
Terraform 的主要特性Infrastructure as Code架構
將基礎架構使用配置語法進行描述,這可讓數據中心的構建計劃能夠像其餘代碼同樣進行版本化和追蹤。工具
Execution Plansspa
Terraform 有一個規劃步驟,它生成一個執行計劃。執行計劃顯示當您調用應用程序時 Terraform 將執行的操做。使用這個功能能夠保證操做基礎設施時不發生意外插件
Resource Graph代理
Terraform 建立了一個全部資源的視圖。這使得 Terraform 能夠並行化沒有依賴的建立與修改。orm
所以,Terraform 能夠高效地構建基礎架構。操做人員也能更加了解環境的結構。
Change Automation
Terraform 會自動的分析什麼是須要修改的,從而避免了許多可能的人爲錯誤。
Terraform vs. Other Software
與 Terraform 相似的 Infrastructure as Code 工具大概有下面幾種:
Chef:
Ansible:
下面將從幾個方面來講明 Terraform 與其餘工具對比的優點。
配置管理工具與編排工具
Chef、Puppet、Ansible、SaltStack 均可以稱爲配置管理工具,這些工具的主要目標是在已經存在的機器上安裝和管理軟件。
而 Terraform 和 CloudFormation 能夠稱爲編排工具,更注重於數據中心以及相關服務的高級抽象。他們的工做重點是建立資源而且引導進行初始化。
並且在如今的環境下,你們使用容器等服務,鏡像已經包括了軟件的安裝與配置。一旦你有了鏡像,你須要的是一些服務器去運行它。
對於提供服務器這種需求,編排工具會比配置管理工具更適合作此類工做。
編程式語言與聲明式語言
Chef 和 Ansible 但願你去一步步編寫程序以達到最終所指望的狀態。
Terraform、CloudFormation、SaltStack、Puppet 但願你去聲明最終想要的資源與資源的狀態,工具自己會自動分析達到想要的狀態須要進行怎樣的操做。
在使用編程式語言時,工具不會獲取歷史的狀態,因此咱們須要考慮的更多以達到與以前版本的兼容。
而且使用編程式語言會致使代碼庫變得愈來愈龐大,不利於人們理解與代碼的複用。不過聲明式的語言的表達能力是較爲欠缺的,例如咱們須要基礎設施的滾動升級時,聲明式的語言是很難知足要求的。
爲此 Terraform 提供了一些基礎服務,例如輸入變量,輸出變量,在銷燬以前建立等。
客戶端服務器架構與客戶端架構
Chef、Puppet、SaltStack 在默認狀況下都使用了客戶端服務器架構。客戶端(多是 Web UI 或 CLI 工具)是用來發出命令(例如 「deploy X」)的東西。
這些命令到達一個服務器,它負責執行你的命令並存儲系統的狀態。要執行這些命令,服務器會與 agent 進行通訊,agent 必須在要配置的每一個服務器上運行,這有幾個缺點:
您必須在每臺服務器上安裝並運行額外的軟件。
爲了配置管理,您必須部署額外的服務器(甚至是一組服務器以實現高可用性)。
因爲客戶端,服務器和代理都須要經過網絡進行通訊,所以您必須爲其打開額外的端口,並配置相互驗證。
這些配置會引入大量不一樣類型的故障,當收到錯誤警告時,必需要弄清楚是哪一部分出現了故障。
CloudFormation 也是客戶端 / 服務器架構,但 AWS 透明地處理全部的服務器細節,做爲最終用戶,您只須要考慮客戶端代碼。Ansible 客戶端則經過 SSH 直接鏈接到您的服務器。
Terraform 使用雲提供商 API 來配置基礎架構,所以除了您已經使用雲提供商以外,沒有新的身份驗證機制,而且不須要直接訪問您的服務器。