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 依賴關係