Terraform - 初解Terraform - 變數

Anliven發表於2024-08-22

Variable變數

Terraform 執行時會讀取工作目錄中所有的 *.tf, *.tfvars檔案,所有變數不應在單個檔案中去,應分類在不同的檔案中。

  • 透過variables.tf檔案集中管理變數
  • 透過variable關鍵字宣告變數的名稱、型別、預設值等
  • 在同一個模組的所有變數中必須是唯一的
  • 可以從環境變數或者文字檔案中讀取
  • 在系統環境變數中export敏感變數的值(以TF_VAR_的名稱開頭)
  • 在terraform.tfvars檔案中定義變數的值,Terraform預設讀取這個檔案

宣告變數的可選引數

  • default 變數的預設值
  • type 變數的型別
  • description 變數的描述資訊
  • validation 定義變數驗證規則
  • sensitive 限制變數在終端中顯示,如果為true就隱藏顯示
  • nullable 變數是否可為空

變數的常見型別

  • any
  • string、number、bool
  • list()、set()、map()
  • object((ATTR_NAME = ATTR_TYPE, ...))、tuple([,...])

例如:使用map型別變數定義DNS域名,在variables.tf中宣告變數map型別,在terraform.tfvars中定義變數的值,在resource中透過map資料型別的索引來呼叫對應值

變數的使用方式

在變數宣告後,可以使用 var.VAR_NAME 的方式引用;VAR_NAME是在variables.tf定義的名稱。

變數的優先順序如下:
1.環境變數,Terraform會讀取TF_VAR_name格式的環境變數
2.terraform.tfvars | terraform.tfvars.json
3.*.auto.tfvars | *.auto.tfvars.json
4.命令列下, -var選項傳遞變數, -var-file選項載入一個變數檔案

Terraform會自動載入當前目錄下副檔名為.tfvars和.auto.tfvars的檔案來填充定義的變數。
如果以其他格式存放,可以使用-var-file選項來手動指定需要載入的HCL格式或JSON格式的變數值檔案。

terraform apply -var="region=cn-beijing"
terraform apply -var='env_list=["dev", "test"]' -var="region=cn-beijing"

terraform apply -var-file="dev.tfvars"

export TF_VAR_region='cn-beijing'
export TF_VAR_env_list='["dev", "test"]"

示例:Terraform會讀取TF_VAR_access_key的環境變數,並用於填充access_key變數。

本地變數

  • 區域性值有助於避免在配置中多次重複相同的值或表示式
  • 多用於除錯和測試
  • 透過locals關鍵字進行定義,透過local.VAR_NAME呼叫

互動輸入

如果沒有對變數賦值,在執行命令時,會出現互動介面,讓使用者手動輸入變數值,來給變數賦值。

Output輸出

  • 可以列印已定義的變數,也可以公開資訊以供其他 Terraform 配置使用
  • 輸出值類似於程式語言中的返回值。

Output可選引數

  • description 變數的描述資訊;
  • sensitive 限制變數在UI中顯示;
  • depends_on 依賴關係

相關文章