一,引言
上篇文章開始,我們簡單介紹了以下通過基礎設施管理工具----- Terraform,通過它來統一管理復雜的雲基礎設施資源。作為入門演示,使用Terraform 部署Azure 資源組的方式直觀的感受到iac 工具帶來的強大便利。接下來,今天介紹 Terraform 語法詳解,從代碼的角度來理解Azure 各個資源模塊更好的理解如果部署資源。
--------------------Azure Terraform 系列--------------------
1,Azure Terraform(一)入門簡介
2,Azure Terraform(二)語法詳解
3,Azure Terraform(三)部署 Web 應用程序
4,Azure Terraform(四)狀態文件存儲
5,Azure Terraform(五)利用Azure DevOps 實現自動化部署基礎資源
6,Azure Terraform(六)Common Module
7,Azure Terraform(七)利用Azure DevOps 實現自動化部署基礎資源(補充)
8,Azure Terraform(八)利用Azure DevOps 實現Infra資源和.NET CORE Web 應用程序的持續集成、持續部署
二,正文
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
版權:轉載請在文章明顯位置注明作者及出處。如發現錯誤,歡迎批評指正。