Terraformで変数を定義する場合、一般的には下記のように変数の値も一緒に定義する。
variables.tf
variable "instance_type" {
type = string
default = "t2.micro"
}
一方で、何らかの事情で値を定義せず、外部から指定するようにして柔軟性を持たせたい場合もある。
本記事てはその方法を紹介する。
前提: 変数は定義して、値をブランクにしておく
variables.tf
variable instance_type {}
下記に紹介する方法で変数の値(中身)を指定できるが、変数定義自体は必要なのでこのように定義しておく。
方法1: CLIで対話形式で入力する
plan/applyを打つと下記のように対話形式で入力することが可能。
terraform plan
var.instance_type
Enter a value:(ここに入力)
方法2: -varフラグで指定する
plan/apply実行時に-var "変数名=値"
と指定する。
terraform plan -var "instance_type=t2.micro"
変数を複数指定したい場合は-var "変数名=値"
の定義を増やす。
terraform plan -var "instance_type=t2.micro" -var "instance_count=2"
方法3: 環境変数を利用する
環境変数にTF_VAR_
というprefixをつけて定義すると、plan/apply時に読み込まれる。
export TF_VAR_instance_type="t2.micro"
terraform plan
方法4: ファイルに定義する
.tfvars
という拡張子のファイルを用意し、そこに値を定義する。
実務ではよく使われる方法だと思う。
terraform.tfvars
instance_type="t2.micro"
ファイル名は下記の4種類であれば自動的に読み込まれる。
- terraform.tfvars
- terraform.tfvars.json
- *.auto.tfvars
- *.auto.tfvars.json
上記以外のファイル名で定義したい場合、-var-file
フラグで指定する。
値の読み込み順序 = 優先順位
ここまで紹介した値の定義方法には読み込み順序(適用順序)があり、後から読み込まれたものが採用される。
- 環境変数(= 優先順位が一番低い)
- terraform.tfvars
- terraform.tfvars.json
4. *.auto.tfvars, *.auto.tfvars.json - -var, -var-file フラグで実行時に与えられたもの(= 優先順位が一番高い)
ちなみに、変数定義時に設定した値は最も優先順位が低く、環境変数の方が優先される。
参考