建立 variables.tf文件,定義變量名爲:aws_region。使用default關鍵字設置默認值:ap-southeast-1。默認值是可選的。若是未設
置默認值,則該變量是必需的。服務器
# variables.tf variable "aws_region" { default = "ap-southeast-1" }
注意:該文件能夠命名爲任何名稱,由於Terraform加載目錄下以*.tf結尾的全部文件。架構
經過使用佔位符 ${}和var關鍵字引用定義的變量名。app
provider "aws" { region = "${var.aws_region}" }
分配變量有多種方法。以變量的優先級考慮,從高到底的順序主要的方法以下:ide
能夠直接在命令行中使用 -var 標誌設置變量 。在該Terraform檢查配置的任何命令接受該標誌,如apply 和 plan。命令行
terraform apply \ -var 'aws_region=ap-southeast-1'
注意:以這種方式設置變量不會保存它們,而且在執行命令時必須重複輸入它們。版本控制
若是想保留變量或者變量是一個固定的值,能夠考慮建立後綴爲 *.tfvars的文件。文件內容以下:code
# terraform.tfvars aws_region = "ap-southeast-1"
對於當前目錄中匹配 terraform.tfvars 或 *.auto.tfvars 存在的全部文件,Terraform會自動加載它們以填充變量。若是文件名爲其餘名稱,則能夠-var-file直接使用該標誌指定文件。這些文件與Terraform配置文件的語法相同。與Terraform配置文件同樣,這些文件也能夠是JSON。orm
terraform apply -var-file="xxx.tfvars"
注意:不建議將用戶名和密碼保存到版本控制中,可是能夠建立一個本地祕鑰變量文件用-var-file加載。blog
-var-file 可使用屢次,指定不一樣的變量文件。例如:ci
terraform apply \ -var-file="secret.tfvars" \ -var-file="production.tfvars"
Terraform將讀取前綴爲TFVAR*的環境變量。例如,TF_VAR_aws_region 能夠將變量設置爲設置aws_region變量。
注意:環境變量只能填充字符串類型的變量。列表和映射類型變量必須經過其餘機制之一進行填充。
若是沒有使用以上任何方法傳入變量值,則會採用默認值。
最後須要注意如下幾點:
# 隱式的定義 variable "cidrs" { default = [] } # 顯示的定義 variable "cidrs" { type = list }
terraform.tfvars 文件內容:
cidrs = [ "10.0.0.0/16", "10.1.0.0/16" ]
爲了合理分配資源,針對不一樣的運行環境,咱們想建立不一樣類型的服務器實例。例如:dev環境咱們只須要用t2.micro,prod環境咱們能夠配置高一點,使用t2.large。
variable "instance_types" { type = "map" default = { "dev" = "t2.micro" "prod" = "t2.large" } } variable "env" { default = "dev" } resource "aws_instance" "example" { instance_type = "${var.instance_types[var.env]}" }
在命令行中傳值:
terraform apply -var 'instance_types={ dev = "t2.micro", prod = "t2.large" }'
在terraform.tfvars 文件定義值:
instance_types = { "dev" = "t2.micro" "prod" = "t2.large" }
完整示例:
provider "aws" { region = "ap-southeast-1" } variable "instance_types" { type = "map" default = { "dev" = "t2.micro" "prod" = "t2.large" } } variable "env" { default = "dev" } resource "aws_instance" "example-instance" { ami = "ami-061eb2b23f9f8839c" instance_type = "${var.instance_types[var.env]}" tags = { Name = "Example by ChangSha Union" } } output "instance_type" { value = "${aws_instance.example-instance.instance_type}" }
若是您喜歡這篇文章,請考慮關注我。
長沙DevOps聯盟 - 關注容器技術,K8S,自動化部署,基礎設施架構。