Azure Terraform(二)語法詳解

Grant_Allen發表於2020-12-28

一,引言

  上篇文章開始,我們簡單介紹了以下通過基礎設施管理工具----- Terraform,通過它來統一管理複雜的雲基礎設施資源。作為入門演示,使用Terraform 部署Azure 資源組的方式直觀的感受到iac 工具帶來的強大便利。接下來,今天介紹 Terraform 語法詳解,從程式碼的角度來理解Azure 各個資源模組更好的理解如果部署資源。

-------------------- Azure Terraform 系列 --------------------

1,Azure Terraform(一)入門簡介

2,Azure Terraform(二)語法詳解

二,正文

1,Azure Providers

Terraform 作為同一個可以可擴充套件的工具,是通過 Provider 來支援新的基礎架構。Provider 是上游API的邏輯抽象。他們負責理解API互動並暴露資源。我們可以將 Provider 可以理解為各個雲廠商提供的與雲資源互動的後端驅動,不同的基礎設施提供商都需要提供一個Provider來實現對自家基礎設施的統一管理,例如我們熟知的 Azure,AWS,GCP,Kubernetes,Aliyun等等。根據官方羅列的 官方 Providers 和驗證過的 Providers,超過了600多個。

大家可以點選此連線檢視具體的 Terraform Providers :https://registry.terraform.io/browse/providers

那麼我們想指定 Terraform Azure Provider 怎麼寫?

provider "azurerm" {
  version = "~>2.0"
  features {}
}

version ="~>2.0" ,表示我們要使用 azure provider 的版本為 >2.0

features:表示自定義某些Azure提供程式資源的行為,我們目前使用的是 azure provider 的版本 2.x,如果使用的 azure provider 的版本為 1.x,則不需要 features

terraform init 來驗證以上的解釋

(1)provider version > 2.0

(2)provider version = 1.33

2,基本的Terraform 配置檔案

resource "azurerm_resource_group" "example" {
  name = "Web_Test_TF_RG"
  location = "East Asia"
}

resource:表示我們將建立型別為 “azurerm_resource_group” 新的資源組

example:表示我們為當前新建立的資源組的 terraform module 起的名稱

當前新建立的資源組,我們為其定義了兩個引數,分別為 “name” 和 “location”

name:表示為當前即將建立的資源組的名稱為 “Web_Test_TF_RG

location:表示當前資源組所在的位置為 “East Asia

接下就是執行部署計劃的過程了 (plan 生成執行計劃過程我就不在演示了)

3,Terraform 狀態管理

terraform apply

執行計劃部署完成後,會在Terraform 專案資料夾中生成 “terraform.tfstate” 的檔案和 “.terraform.tfstate.lock.info”的檔案

 terraform.tfstate:當前檔案中包含了因為它包含有關已部署到Azure的內容的所有狀態資訊

terraform.tfstate.lock.info:這個檔案從名字上就可以看出來,部署過程中加鎖。這時候就有人疑惑了,為什麼要加鎖 ?

原因很簡單,就那運算元據庫來說,對同一資料的修改,或者刪除的時候,需要加鎖處理。這裡的terraform 的狀態檔案加鎖也是同樣的道理。

4,Terraform擴充套件知識點

其實我們都知道,Azure 有好幾個版本,我們一般常用的就是 Azure Global,Azure China,如果我們在 Azure Provider 中不指定哪個Azure 環境,Terraform 會預設認為我們是將雲資源部署在 Azure Global 上的。如果我們用的是Azure China(世紀互聯版的Azure),那我就必須得在 Provider 中指定Azure 環境

environment 的值可能為:

  (1)public(預設)

  (2)usgovernment

  (3)german

  (4)china

注意:如果不想在Provider 中指定雲環境,我們可以設定環境變數

setx ARM_ENVIRONMENT china

完整示例

provider "azurerm" {
  version = "~>2.0"
  environment = "china"
  features {}
}

ok,今天的分享就到此結束,今天也沒有介紹新的內容,基本上就是對昨天程式碼的引數介紹,讓我們能夠更好的理解 Terraform 。

φ(゜▽゜*)♪是?‍??‍??‍??‍??‍?!

三,結尾

參考資料:Terraform 官方Terraform 登錄檔

作者:Allen 

版權:轉載請在文章明顯位置註明作者及出處。如發現錯誤,歡迎批評指正。

相關文章