我一直在研究,但是找不到区别。 variable.tf文件可以存储变量默认值/值,例如terraform.tfvars文件。
两者之间的区别是什么?我的理解是,是否可以通过命令行将var文件作为terraform中的参数传递。
已经有一个关于此的线程,唯一的好处似乎是将tfvars文件作为参数传递,因为您可以“潜在地”对variable.tf文件中的变量进行赋值。
这是正确的想法吗?
答案 0 :(得分:1)
variables.tf 文件用于定义变量类型,还可以选择设置默认值。
terraform.tfvars 文件用于设置变量的实际值。
您可以为所有变量设置默认值,而根本不使用tfvars文件。
实际上,在定义和值之间进行划分的目的是允许定义通用的基础结构设计,然后在每个环境中应用特定的值。
使用您提供的多个tfvars文件作为参数,可以为每个环境设置不同的值:机密,VM大小,实例数等。
答案 1 :(得分:1)
这些区别是声明与赋值。
variable
块(实际上可以出现在任何.tf
文件中,但按照惯例位于variables.tf
中)声明变量存在:
variable "example" {}
这告诉Terraform该模块接受名为example
的输入变量。声明这一点使得在模块的其他位置使用var.example
来访问变量的值是有效的。
有几种不同的方法可以为该输入变量分配 value :
-var
或terraform plan
命令行上包含terraform apply
选项。-var-file
选项以选择一个或多个.tfvars
文件以一次为多个变量设置值。terraform.tfvars
文件或一个名为.auto.tfvars
的文件,它们与-var-file
参数相同,但会自动加载。module
块内包含一个表达式以分配给该变量。可以选择使用默认值声明变量,这使其成为可选值。变量 defaults 用于存在良好的默认行为的情况,该行为对于大多数模块/配置的使用都适用,而在特殊情况下仍可以覆盖该行为。
分配变量值的各种方法是用于处理差异。这意味着什么将完全取决于您如何使用Terraform,但是例如,如果您多次使用相同的配置来部署相同基础结构(环境等)的不同“副本”,那么您可能会选择使用不同的{{ 1}}个文件。
由于.tfvars
和terraform.tfvars
会自动加载而没有任何其他选项,因此它们的行为与默认值相似,但是它们的目的不同。在running Terraform in automation时,某些用户会在运行Terraform之前使其自动化生成.auto.tfvars
文件或terraform.tfvars
,以便传递自动化知道的值,例如自动化运行的环境,等
在处理子模块时,自动加载的.auto.tfvars
文件和变量默认值之间的区别更加明显。 .tfvars
个文件(以及.tfvars
,-var
选项)仅适用于root module variables,而变量默认值也适用于将该模块用作子模块的情况,这意味着带有module
blocks中可以省略默认值。