首页 > 解决方案 > terraform.tfvars 与 variables.tf 的区别

问题描述

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

这两者之间有什么区别以及需要一个而不是另一个?我的理解是,如果您通过命令行将 var 文件作为 terraform 中的参数传递。

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

这是正确的想法吗?

标签: terraform

解决方案


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

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

variable "example" {}

这告诉 Terraform 该模块接受一个名为example. 说明这一点使得var.example在模块中的其他地方使用来访问变量的值是有效的。

有几种不同的方法可以给这个输入变量赋值

  • 在or命令行上包含-var选项。terraform 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在处理子模块时,自动加载的文件和变量默认值之间的区别更加明显。.tfvarsfiles (and -var, -var-fileoptions) 仅适用于模块 variables,而当该模块也用作子模块时,变量默认值也适用,这意味着可以在moduleblocks中省略具有默认值的变量。


推荐阅读