terraform.tfvars与variables.tf的区别

Gur*_*epS 5 terraform

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

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

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

这是正确的想法吗?

Mar*_*ins 9

这些之间的区别是声明赋值

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

variable "example" {}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

由于terraform.tfvars.auto.tfvars会自动加载而没有任何其他选项,因此它们的行为与默认值相似,但是它们的目的不同。当自动化运行Terraform,一些用户有自己的自动化生成一个terraform.tfvars文件,或.auto.tfvars只是为了在价值观自动化知道,如自动化运行什么样的环境,等等。通过运行Terraform前

.tfvars在处理子模块时,自动加载的文件和变量默认值之间的区别更加明显。.tfvars文件(和-var-var-file选项)仅适用于模块变量,而当该模块被用作子模块太,这意味着使用默认值可以被省略的变量变量默认应用module


小智 5

variables.tf文件用于定义变量类型和任选设置的默认值

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

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

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

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

  • 另外值得注意的一点是 **terraform.tfvars** 文件无法自行声明新变量。它只能为相应 **variables.tf** 文件中声明的变量提供值。 (8认同)