terraform.tfvars与variables.tf的区别

时间:2019-05-11 00:34:50

标签: terraform

我一直在研究,但是找不到区别。 variable.tf文件可以存储变量默认值/值,例如terraform.tfvars文件。

两者之间的区别是什么?我的理解是,是否可以通过命令行将var文件作为terraform中的参数传递。

已经有一个关于此的线程,唯一的好处似乎是将tfvars文件作为参数传递,因为您可以“潜在地”对variable.tf文件中的变量进行赋值。

这是正确的想法吗?

2 个答案:

答案 0 :(得分:1)

variables.tf 文件用于定义变量类型,还可以选择设置默认值

terraform.tfvars 文件用于设置变量的实际值

您可以为所有变量设置默认值,而根本不使用tfvars文件。

实际上,在定义和值之间进行划分的目的是允许定义通用的基础结构设计,然后在每个环境中应用特定的值。

使用您提供的多个tfvars文件作为参数,可以为每个环境设置不同的值:机密,VM大小,实例数等。

答案 1 :(得分:1)

这些区别是声明赋值

variable块(实际上可以出现在任何.tf文件中,但按照惯例位于variables.tf中)声明变量存在:

variable "example" {}

这告诉Terraform该模块接受名为example的输入变量。声明这一点使得在模块的其他位置使用var.example来访问变量的值是有效的。

有几种不同的方法可以为该输入变量分配 value

  • -varterraform plan命令行上包含terraform apply选项。
  • 包括-var-file选项以选择一个或多个.tfvars文件以一次为多个变量设置值。
  • 创建一个terraform.tfvars文件或一个名为.auto.tfvars的文件,它们与-var-file参数相同,但会自动加载。
  • 对于子模块,在调用module块内包含一个表达式以分配给该变量。

可以选择使用默认值声明变量,这使其成为可选值。变量 defaults 用于存在良好的默认行为的情况,该行为对于大多数模块/配置的使用都适用,而在特殊情况下仍可以覆盖该行为。

分配变量值的各种方法是用于处理差异。这意味着什么将完全取决于您如何使用Terraform,但是例如,如果您多次使用相同的配置来部署相同基础结构(环境等)的不同“副本”,那么您可能会选择使用不同的{{ 1}}个文件。

由于.tfvarsterraform.tfvars会自动加载而没有任何其他选项,因此它们的行为与默认值相似,但是它们的目的不同。在running Terraform in automation时,某些用户会在运行Terraform之前使其自动化生成.auto.tfvars文件或terraform.tfvars,以便传递自动化知道的值,例如自动化运行的环境,等

在处理子模块时,自动加载的.auto.tfvars文件和变量默认值之间的区别更加明显。 .tfvars个文件(以及.tfvars-var选项)仅适用于root module variables,而变量默认值也适用于将该模块用作子模块的情况,这意味着带有module blocks中可以省略默认值。