terraform - terraform.tfvars 与 variables.tf 的区别
问题描述
我一直在研究这个,但找不到区别。variables.tf 文件可以存储变量默认值/值,例如 terraform.tfvars 文件。
这两者之间有什么区别以及需要一个而不是另一个?我的理解是,如果您通过命令行将 var 文件作为 terraform 中的参数传递。
已经有一个关于此的线程,唯一的好处似乎是将 tfvars 文件作为参数传递,因为您可以“潜在地”在 variable.tf 文件中分配变量。
这是正确的想法吗?
解决方案
这些之间的区别是声明与赋值。
variable
块(实际上可以出现在任何.tf
文件中,但按照variables.tf
惯例)声明变量存在:
variable "example" {}
这告诉 Terraform 该模块接受一个名为example
. 说明这一点使得var.example
在模块中的其他地方使用来访问变量的值是有效的。
有几种不同的方法可以给这个输入变量赋值:
- 在or命令行上包含
-var
选项。terraform plan
terraform 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
files (and -var
, -var-file
options) 仅适用于根模块 variables,而当该模块也用作子模块时,变量默认值也适用,这意味着可以在module
blocks中省略具有默认值的变量。
推荐阅读
- caching - Twitter扇出设计
- docker - 如何设置启用 docker-dind TLS 的 Gitlab-Runner
- algorithm - 函数 T(n) = T(n//3)) + 1 的时间复杂度是多少
- prolog - 规则头中的 Prolog 单例变量导致程序为所有查询输出布尔值
- android - 在android studio中显示和隐藏栏的稳定视图
- python - 'str' 对象不能解释为文本抓取方法中的整数错误
- reactjs - 如何在 React 项目中集成 chrome 铸造
- c# - 有没有办法忽略asp.net核心中的特定属性包含多对多关系的函数
- ubuntu - 配置:错误:远程访问需要 curl。安装 curl 或使用 --disable-dap 构建
- mysql - Laravel InsertOrIgnore - 插入了哪些记录?