文章目標:分享不同種類的變數在 Terraform 中的使用案例和優勢。
Terraform 變數是一種用於參數化 Terraform 配置的機制,它有下列幾種常見的類型。
字串變數(String variables):用於定義字符串值的變數,例如:"us-west1"
數值變數(Number variables):用於定義數字值的變數,例如:1,2,3
布林變數(Boolean variables):用於定義布林值(True 或 False)的變數,例如:true, false
列表變數(List variables):用於定義多個值的變數,例如:["web", "dev", "app"]
映射變數(Map variables):用於定義鍵值對(Key-Value Pairs)的變數,例如:{ us-west1 = "us-west1-a" us-west2 = "us-west2-a" us-east1 = "us-east1-b" }
利用這張變數種類表,可以詳細的了解各種變數。
實際使用時,如何在terraform使用不同類型的變數,可以在下面的範例中看到五種變數的使用。
# 字串變數(String variables):用於定義字符串值的變數
variable "region" {
type = string
default = "us-west1"
}
# 數字變數(Number variables):用於定義數字值的變數
variable "instance_count" {
type = number
default = 2
}
# 布林變數(Boolean variables):用於定義布林值(True 或 False)的變數
variable "use_ssl" {
type = bool
default = true
}
# 列表變數(List variables):用於定義多個值的變數
variable "tags" {
type = list(string)
default = ["web", "dev", "app"]
}
# 映射變數(Map variables):用於定義鍵值對(Key-Value Pairs)的變數
variable "region_zone_map" {
type = map(string)
default = {
us-west1 = "us-west1-a"
us-west2 = "us-west2-a"
us-east1 = "us-east1-b"
}
}
variable "token" {
type = string
}
Terraform 變數是一種用於參數化 Terraform 配置的機制,它可以在下列的實際被修改或注入,我們要特別注意那個優先權是最高的。
命令列參數(Command-line flags):最高優先權,例如使用 terraform apply -var="foo=bar" 傳遞變數。
Terraform Environment Variables:例如使用 TF_VAR_foo 環境變數定義變數。
Terraform Variable Files:例如使用 terraform.tfvars 文件定義變數。
Terraform 設定文件(Terraform Configuration Files):例如使用 variables 區塊定義變數。
變數預設值(Default variable values):若上述四個步驟都沒有設置該變數,則使用預設值。
利用這張變數繼承順序表,可以詳細的了解變數在不同環境時的使用優先權。
使用GCP的cloud shell環境,來執行terraform (沒有使用過請參閱Terraform 工作流程)
利用terraform.tfvars來修改變數
利用terraform console 來觀察變數
創建專案以後,右上角先啟動cloud shell,並選擇使用vscode 編輯器開啟新頁面。
進入vscode 編輯器後,新建或開啟main.tf的檔案,並複製下列程式碼到視窗中,我們要利用這些程式碼練習,可以先輸入練習後,再來回來看代表的意義。
可以到下方的github連結中,下載對應的參考程式碼
首先創建兩個檔案,分別是 variables-sample.tf , terraform.tfvars.example
variables-sample.tf
# 字串變數(String variables):用於定義字符串值的變數
variable "region" {
type = string
default = "us-west1"
}
# 數字變數(Number variables):用於定義數字值的變數
variable "instance_count" {
type = number
default = 2
}
# 布林變數(Boolean variables):用於定義布林值(True 或 False)的變數
variable "use_ssl" {
type = bool
default = true
}
# 列表變數(List variables):用於定義多個值的變數
variable "tags" {
type = list(string)
default = ["web", "dev", "app"]
}
# 映射變數(Map variables):用於定義鍵值對(Key-Value Pairs)的變數
variable "region_zone_map" {
type = map(string)
default = {
us-west1 = "us-west1-a"
us-west2 = "us-west2-a"
us-east1 = "us-east1-b"
}
}
variable "token" {
type = string
}
這些 Terraform 變數用於展示不同類型的變數,以下是各個變數的解釋:
region 變數:此變數用於定義字符串值,通常用來指定您的基礎架構所在的區域或地區。默認值是 "us-west1",但您可以根據需要更改它。
instance_count 變數:該變數用於定義數字值,通常用來指定要創建的實例數量。預設值為 2,但您可以根據需求進行調整。
use_ssl 變數:這是一個布林變數,用於指定是否使用 SSL(True 或 False)。默認情況下,設置為 true,表示使用 SSL。
tags 變數:此變數用於定義一個包含多個字符串值的列表,通常用於分類或標記基礎架構資源。預設包含 ["web", "dev", "app"],您可以自訂標籤。
region_zone_map 變數:這是一個映射變數,用於定義區域到區域內可用區域的映射。它是一個鍵值對,其中鍵是區域名稱,值是可用區域名稱的字符串。提供了預設映射,但您可以根據需求自訂。
token 變數:此變數用於定義字符串值,但它沒有默認值,因此需要在使用時提供具體的值。
terraform.tfvars.example
我們會利用到下面兩個變數來做變數覆寫。
region = "us-west2"
token = "aidshfoiahd!@"
terraform.tfvars.example
使用終端機執行 terraform console ,我們要來查看變數的繼承與覆寫行為。
terraform console
terraform console打入下列變數名稱,就可以看到對應的變數數值,但如果打入var.token應該看不到任何變數數值。因為我們沒有任何針對這個變數,在上述的五個注入點做變數注入。
var.region
var.instance_count
var.use_ssl
var.tags
var.region_zone_map
# 看不到任何變數數值
var.token
最後將terraform.tfvars.example的檔案名稱修改為terraform.tfvars,這時候terraform會預設用terraform.tfvars中的兩個變數數值來做變數注入。這時候使用終端機執行 terraform console並再次執行這兩個變數。
terraform.tfvars
region = "us-west2"
token = "aidshfoiahd!@"
這時候使用終端機執行 terraform console並再次執行這兩個變數,就會發現原本的 var.region 從 "us-west1" 變成 "us-west2",而var.token 從沒有數值變成 "aidshfoiahd!@"。這樣就完成我們變數的練習。
var.region
var.token
Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code — https://github.com/qwedsazxc78/Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code
Terraform-project-best-practice — https://github.com/qwedsazxc78/terraform-project-best-practice
歡迎訂閱我的udemy課程:Terraform 從零開始 - 10+實戰Lab打造GCP雲端自動化架構課程 - https://devops-with-alex.com/go/terraform