在执行plan/apply时指定Terraform变量的值的方法
在使用Terraform定义变量时,一般情况下也会将变量值一起定义,如下所示。
variable "instance_type" {
type = string
default = "t2.micro"
}
有时候出于某种原因,我们不希望定义一个固定的值,而是希望从外部进行指定以增加灵活性。本文将介绍这种方法。
前提:先定义变量,并将其值设为空。
variable instance_type {}
通过下面介绍的方法,可以指定变量的值(内容),但变量的定义本身是必要的,因此需要事先定义它。
选项1:使用CLI以交互式方式输入
当输入plan/apply时,可以以对话形式进行输入,示例如下。
terraform plan
var.instance_type
Enter a value:(ここに入力)
选项2: 使用-var标志指定
在执行计划/应用程序时,通过指定-var “变量名=值”来设置。
terraform plan -var "instance_type=t2.micro"
如果想要指定多个变量的话,可以增加 “-var” 后面的 “变量名=值” 的定义。
terraform plan -var "instance_type=t2.micro" -var "instance_count=2"
第三种方法:利用环境变量
如果您在环境变量中添加一个名为TF_VAR_的前缀来定义,它将在计划/应用时被读取。
export TF_VAR_instance_type="t2.micro"
terraform plan
选项1: 方法4: 在文件中定义
准备一个名为 .tfvars 的文件,并在里面定义数值。
我认为这在实践中是经常使用的方法。
instance_type="t2.micro"
只要文件名属于以下四种类型之一,就会自动加载。
-
- 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 标记在执行时提供的内容(= 优先级最高)
顺便提一下,设定变量时的值具有最低的优先级,环境变量具有更高的优先级。
请参考