blog post

Day 12 — Terraform基礎 — 變數 (Variables) 種類與使用順序

文章目標:分享不同種類的變數在 Terraform 中的使用案例和優勢。

Day 12 — Terraform基礎 — 變數 (Variables) 種類與使用順序
Day 12 — Terraform基礎 — 變數 (Variables) 種類與使用順序

文章同步分享到
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 配置的機制,它有下列幾種常見的類型。

  1. 字串變數(String variables):用於定義字符串值的變數,例如:”us-west1"
  2. 數值變數(Number variables):用於定義數字值的變數,例如:1,2,3
  3. 布林變數(Boolean variables):用於定義布林值(True 或 False)的變數,例如:true, false
  4. 列表變數(List variables):用於定義多個值的變數,例如:[“web”, “dev”, “app”]
  5. 映射變數(Map variables):用於定義鍵值對(Key-Value Pairs)的變數,例如:{
    us-west1 = “us-west1-a”
    us-west2 = “us-west2-a”
    us-east1 = “us-east1-b”
    }

利用這張變數種類表,可以詳細的了解各種變數。

https://gist.github.com/qwedsazxc78/15d21ffd3a1137022945868d314e976d

實際使用時,如何在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 Variables 變數種類 1/2
Terraform Variables 變數種類 2/2

2. Terraform Variables變數使用順序

Terraform 變數是一種用於參數化 Terraform 配置的機制,它可以在下列的實際被修改或注入,我們要特別注意那個優先權是最高的。

  1. 命令列參數(Command-line flags):最高優先權,例如使用 terraform apply -var=”foo=bar” 傳遞變數。
  2. Terraform Environment Variables:例如使用 TF_VAR_foo 環境變數定義變數。
  3. Terraform Variable Files:例如使用 terraform.tfvars 文件定義變數。
  4. Terraform 設定文件(Terraform Configuration Files):例如使用 variables 區塊定義變數。
  5. 變數預設值(Default variable values):若上述四個步驟都沒有設置該變數,則使用預設值。

利用這張變數繼承順序表,可以詳細的了解變數在不同環境時的使用優先權。

https://gist.github.com/qwedsazxc78/935e3efeec0a1bab87a09eb4ee6eb35a

2. 實際Terraform操作

任務目標:

  1. 使用GCP的cloud shell環境,來執行terraform (沒有使用過請參閱Terraform 工作流程)
  2. 利用terraform.tfvars來修改變數
  3. 利用terraform console 來觀察變數

啟動cloud shell並輸入代碼

創建專案以後,右上角先啟動cloud shell,並選擇使用vscode 編輯器開啟新頁面。

啟動cloud shell
新建或開啟main.tf的檔案

進入vscode 編輯器後,新建或開啟main.tf的檔案,並複製下列程式碼到視窗中,我們要利用這些程式碼練習,可以先輸入練習後,再來回來看代表的意義。

範例程式碼:變數 (Variables) 種類與使用順序

可以到下方的github連結中,下載對應的參考程式碼

  1. Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code
  2. 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 變數用於展示不同類型的變數,以下是各個變數的解釋:

  1. region 變數:此變數用於定義字符串值,通常用來指定您的基礎架構所在的區域或地區。默認值是 “us-west1”,但您可以根據需要更改它。
  2. instance_count 變數:該變數用於定義數字值,通常用來指定要創建的實例數量。預設值為 2,但您可以根據需求進行調整。
  3. use_ssl 變數:這是一個布林變數,用於指定是否使用 SSL(True 或 False)。默認情況下,設置為 true,表示使用 SSL。
  4. tags 變數:此變數用於定義一個包含多個字符串值的列表,通常用於分類或標記基礎架構資源。預設包含 [“web”, “dev”, “app”],您可以自訂標籤。
  5. region_zone_map 變數:這是一個映射變數,用於定義區域到區域內可用區域的映射。它是一個鍵值對,其中鍵是區域名稱,值是可用區域名稱的字符串。提供了預設映射,但您可以根據需求自訂。
  6. token 變數:此變數用於定義字符串值,但它沒有默認值,因此需要在使用時提供具體的值。

terraform.tfvars.example

我們會利用到下面兩個變數來做變數覆寫。

region = "us-west2"
token  = "aidshfoiahd!@"
範例程式碼:變數 (Variables) 種類與使用順序

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 console 查看terraform.tfvars的繼承與覆寫行為

最後將terraform.tfvars.example的檔案名稱修改為terraform.tfvars,這時候terraform會預設用terraform.tfvars中的兩個變數數值來做變數注入。這時候使用終端機執行 terraform console並再次執行這兩個變數。

terraform.tfvars

region = "us-west2"
token  = "aidshfoiahd!@"
terraform.tfvars

這時候使用終端機執行 terraform console並再次執行這兩個變數,就會發現原本的 var.region“us-west1” 變成 “us-west2”,而var.token 從沒有數值變成 code>“aidshfoiahd!@”</code。這樣就完成我們變數的練習。

var.region
var.token
terraform console 使用terraform.tfvars 變數覆寫

總結 Summary

  1. Terraform變數種類:
    – 字串變數(String variables):用於定義字符串值,例如區域名稱。
    – 數值變數(Number variables):用於定義數字值,例如實例數量。
    – 布林變數(Boolean variables):用於定義布林值,例如是否使用SSL。
    – 列表變數(List variables):用於定義多個值,例如資源標籤。
    – 映射變數(Map variables):用於定義鍵值對,例如區域到可用區域的映射。
  2. Terraform變數使用優先順序:
    – 命令列參數:具有最高優先權,可以在命令中傳遞變數。
    – 環境變數:使用TF_VAR_前綴的環境變數來定義變數。
    – 變數文件:使用terraform.tfvars文件中的變數定義。
    – Terraform配置文件:使用variables區塊在配置文件中定義變數。
    – 預設值:如果前面的四個步驟都未設置變數,則使用預設值。
  3. 實際操作:我們使用了各種不同類型的變數,包括字串、數字、布林、列表和映射變數。並且,我們演示了如何使用terraform.tfvars文件來修改變數,以及如何使用terraform console來觀察變數的值。

相關連結

  1. 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
  2. Terraform-project-best-practice — https://github.com/qwedsazxc78/terraform-project-best-practice
  3. 歡迎訂閱我的udemy課程:Terraform 從零開始 — 10+實戰Lab打造GCP雲端自動化架構課程

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *