文章目標:分享不同種類的變數在 Terraform 中的使用案例和優勢。
Day 16 — Terraform/GCP基礎 — GCP服務帳號 (Service Account) 與使用者 (User) 的差異
Day 19 — Terraform/GCP基礎 — 建議的 Terraform 開發最佳實踐 best practices
Day 22 — Terraform/GCP實戰:使用 GCP Console 創建 GCP 無伺服器服務Cloud Function
Day 23 — Terraform/GCP實戰:使用 Terraform 創建 GCP 無伺服器服務Cloud Function
Day 24 — Terraform/GCP實戰:使用 GCP Console 創建 GCP 無伺服器服務 (Cloud Run)
Day 25 — Terraform/GCP實戰:使用 Terraform 創建 GCP 無伺服器服務 (Cloud Run)
Day 26 — Terraform/GCP實戰:使用 GCP Console 創建 GCP 運算服務 Kubernetes GKE
Day 27 — Terraform/GCP實戰 :使用 Terraform 創建 GCP 運算服務 Kubernetes GKE
Day 28 — Terraform/GCP實戰:使用 GCP Console 創建 GCP 資料庫服務 Cloud Sql (PostgreSQL)
Day 29 — Terraform/GCP實戰:使用 Terraform 創建 GCP 資料庫服務 Cloud Sql (PostgreSQL)
Day 30 — Terraform/GCP實戰:使用 GCP Console 創建 GCP 資料庫服務 Cloud MemoryStore — Redis
Day 31 — Terraform/GCP實戰:使用 Terraform 創建 GCP 資料庫服務Cloud MemoryStore — Redis
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連結中,下載對應的參考程式碼
首先創建兩個檔案,分別是 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
從沒有數值變成 “aidshfoiahd!@”
。這樣就完成我們變數的練習。
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來觀察變數的值。