天天看點

Terraform 實踐前篇 - Terraform overview

前兩篇剛剛介紹了Azure中Blueprint的應用,作為一個Infrastructure as code的工具,Blueprint其實主要是用的還是ARM Template來部署資源,ARM Template主要使用的是JSON語言,港真來說,JSON對于人類的友好性還是差了點,不管是編輯還是閱讀,是以,今天準備介紹另外一款更流行的IAC工具,也就是Terraform 

首先,什麼是Terraform

Terraform 官網是這麼定義的

Terraform is an open-source infrastructure as code software tool that provides a consistent CLI workflow to manage hundreds of cloud services. Terraform codifies cloud APIs into declarative configuration files.

抓取關鍵字,Terraform 是個infrastructure as code的工具,可以管理上百種cloud service,這就是Terraform的作用,可以用來管理、部署資源,實際上terraform能管理的遠遠不止是公有雲資源,包括K8S, VMware,甚至是F5這種防火牆都可以用terraform來管理,terraform相當于是個基礎的體系,制定了文法和規範,在這基礎上,各個廠商都可以通過provider的形式來讓terraform支援自家的産品

Provider就是Terraform用來實作IAC的方式,可以相當于是提供了Terraform和第三方平台底層的API互動,通過Provider,可以将編寫的IAC代碼,轉換成平台可以支援的API,進而實作資源的部署、更改等操作

Terraform支援上百種provider,如果需要哪個公司的産品,可以嘗試在這裡找找

https://registry.terraform.io/browse/providers

值得一提的是,terraform支援的公有雲廠商非常之多,囊括的不僅僅是國際知名的Ali、Azure、AWS、GCP這種一線大廠,國内像騰訊雲、華為雲等廠商terraform也可以支援,是以作為一個統一的跨平台IAC工具,Terrafrom絕對是非常合适的

Terraform的文法說難不難,說簡單也不是特别簡單,但是從編寫和可讀性的角度來說,其實都是要比JSON好很多的,terraform使用的是叫做HCL的文法,既不是json也不是yaml,可以說和yaml更像一些,大緻寫法類似下邊這種格式

terraform同時其實也可以支援JSON,隻不過很少有人這麼用

下邊簡單說下terraform裡一些關鍵性的資源和使用方法

terraform裡用來定義資源的主要關鍵字其實就是resource,resource裡可以定義我們要建立的資源,就比如下邊的範例中,我們要建立的就是azure的resource group,要建立什麼資源,就在resource後邊加上資源的類型,資源的類型并不是我們自己指定的,而是廠商在provider裡已經定義好的,我們需要遵循這些規則來建立資源,至于都可以建立哪些資源,則可以參考廠商提供的文檔,舉例來說,Azure的文檔可以在這裡找到

https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs

學會使用resource,最起碼最基礎的一些資源定義就沒問題了,至于具體如何把這些資源的定義轉換為實際要建立資源的操作,則是通過Terraform CLI實作,Terraform CLI是個指令行工具,我們定義好要建立的資源後,就需要通過terraform CLI進行實際的部署操作了

https://www.terraform.io/downloads.html

Terraform CLI最關鍵的幾個指令有以下幾種

Terraform init:  init主要是用來做初始化操作,初始化過程中可以下載下傳需要的provider,module等等

Terraform Plan: plan類似于預部署模式,在這個過程中會檢查文法的錯誤,然後根據文法中定義的内容先演練下會部署哪些資源

Terraform Apply: plan就是實際的部署動作了,執行了plan相當于就是執行了最終的操作,是以要慎重一些

Terraform Destroy: destroy會根據tfstate裡的内容,把資源删除掉,是以一定要慎重

後邊用個簡單案例來示範下terraform怎麼進行部署的操作

繼續閱讀