iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
DevOps

Terraform 從零開始 - 實戰Lab打造GCP雲端自動化架構系列 第 12

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

  • 分享至 

  • xImage
  •  

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

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

文章同步分享到

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" }

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

實際使用時,如何在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):若上述四個步驟都沒有設置該變數,則使用預設值。

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

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 從沒有數值變成 "aidshfoiahd!@"。這樣就完成我們變數的練習。

var.region
var.token

terraform console 使用terraform.tfvars 變數覆寫

總結 Summary

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

相關連結

  1. Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Codehttps://github.com/qwedsazxc78/Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code

  2. Terraform-project-best-practicehttps://github.com/qwedsazxc78/terraform-project-best-practice

  3. 歡迎訂閱我的udemy課程:Terraform 從零開始 - 10+實戰Lab打造GCP雲端自動化架構課程 - https://devops-with-alex.com/go/terraform


上一篇
Day 11— Terraform基礎 — 變數 (Variables) 與輸出 (Outputs)
下一篇
Day 13 — Terraform基礎 — 資料來源 (Data Sources) 的概念與使用
系列文
Terraform 從零開始 - 實戰Lab打造GCP雲端自動化架構31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言