[1]翻譯自官網html
把全部的信息,如access_key等所有硬編碼顯然是不安全的。所以須要可以參數化配置。安全
首先須要先定義(聲明)變量,放到一個.tf
文件中,如:app
variable "access_key" {} variable "secret_key" {} variable "region" { default = "us-east-1" }
上面定義了三個變量。前兩個變量是空的,第三個給了一個默認值(默認參數)。此時運行terraform plan
,Terraform會提示輸入這些還沒有定義的變量。ide
變量定義好後,就能夠引用這些變量來進行Terraform的配置,如:編碼
provider "aws" { access_key = "${var.access_key}" secret_key = "${var.secret_key}" region = "${var.region}" }
引用變量,使用${var.xxx}
的形式。翻譯
前面咱們聲明瞭變量,可是尚未給變量賦值,沒法真正使用。給變量賦值,有如下幾種方法,下面幾種方法按照變量賦值的優先順序排序。版本控制
Command-line flagscode
使用terraform的各類命令時,使用-var
選項,能夠在後面直接跟變量的定義,如:orm
# terraform apply \ -var 'access_key=foo' -var 'secret_key=bar' # ...
以這種方式賦值變量是一次性的,並不會保存它們的值,也就是說下一次從新執行命令時,須要從新賦值。htm
從文件導入
爲永久性存儲一個變量的值,能夠將其放在文件中保存。Terraform會自動加載當前目錄下擴展名爲.tfvars
和.auto.tfvars
的文件來填充定義的變量。若是以其餘格式存放,可使用-var-file
選項來手動指定須要加載的變量值文件。這些文件使用Terraform格式或JSON格式。
使用文件也方便版本控制,可是用戶名、密碼這種東西就不要用版本控制管理的。所以能夠將用戶名和密碼這類信息單獨放在一個文件中,使用-var-file
來手動指定。其餘的,能夠自動填充,方便使用版本控制管理的,能夠直接放在.tfvars
文件中,Terraform會自動加載。
環境變量
Terraform會讀取TF_VAR_name
這種格式的環境變量,用來填充定義好的變量。好比,環境變量中有一個TF_VAR_access_key
的變量,Terraform就會讀取到,並用於填充access_key
變量。
default值
若是某個變量沒有采用以上任何一種方法來進行賦值,那麼若是在變量的定義中有個default
屬性,那麼Terraform就會使用default
的值來對變量進行賦值。
交互輸入
沒有使用任何方法來對變量賦值,在輸入命令時使得Terraform不知道如何處理,此時就會出現交互界面,讓用戶手動輸入變量值,來給變量賦值。