文章目標:分享不同種類的變數在 Terraform 中的使用案例和優勢。
文章同步分享到
blog – https://devops-with-alex.com/day-12-terraform-variables-category/
ithome – https://ithelp.ithome.com.tw/articles/10328118
Medium – https://medium.com/p/2de9f834c615
1. Terraform Variables 種類與使用順序
Terraform Variables 種類
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 }
2. Terraform Variables變數使用順序
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):若上述四個步驟都沒有設置該變數,則使用預設值。
利用這張變數繼承順序表,可以詳細的了解變數在不同環境時的使用優先權。
2. 實際Terraform操作
任務目標:
- 使用GCP的cloud shell環境,來執行terraform (沒有使用過請參閱Terraform 工作流程)
- 利用terraform.tfvars來修改變數
- 利用terraform console 來觀察變數
啟動cloud shell並輸入代碼
創建專案以後,右上角先啟動cloud shell,並選擇使用vscode 編輯器開啟新頁面。
進入vscode 編輯器後,新建或開啟main.tf的檔案,並複製下列程式碼到視窗中,我們要利用這些程式碼練習,可以先輸入練習後,再來回來看代表的意義。
範例程式碼:變數 (Variables) 種類與使用順序
可以到下方的github連結中,下載對應的參考程式碼
- Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code
- Day 12 — Terraform基礎 — 變數 (Variables) 種類與使用順序
首先創建兩個檔案,分別是 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 console 查看terraform.tfvars的繼承與覆寫行為
最後將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
從沒有數值變成 code>“aidshfoiahd!@”</code。這樣就完成我們變數的練習。
var.region var.token
總結 Summary
- Terraform變數種類:
– 字串變數(String variables):用於定義字符串值,例如區域名稱。
– 數值變數(Number variables):用於定義數字值,例如實例數量。
– 布林變數(Boolean variables):用於定義布林值,例如是否使用SSL。
– 列表變數(List variables):用於定義多個值,例如資源標籤。
– 映射變數(Map variables):用於定義鍵值對,例如區域到可用區域的映射。 - Terraform變數使用優先順序:
– 命令列參數:具有最高優先權,可以在命令中傳遞變數。
– 環境變數:使用TF_VAR_前綴的環境變數來定義變數。
– 變數文件:使用terraform.tfvars文件中的變數定義。
– Terraform配置文件:使用variables區塊在配置文件中定義變數。
– 預設值:如果前面的四個步驟都未設置變數,則使用預設值。 - 實際操作:我們使用了各種不同類型的變數,包括字串、數字、布林、列表和映射變數。並且,我們演示了如何使用terraform.tfvars文件來修改變數,以及如何使用terraform console來觀察變數的值。
相關連結
- 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雲端自動化架構課程