运维 Terraform: terraform.tfvars 与 variables.tf 的区别

xiaoronglv for Workstream · 2021年07月03日 · 最后由 xinyifly 回复于 2021年07月07日 · 389 次阅读

通常一个 Terraform 项目下,关于变量的文件有好几个:

  • output.tf
  • variables.tf
  • locals.tf
  • terraform.tfvars

其中 variables.tf 和 terraform.tfvars 最容易让人困惑,他们之间有什么区别和联系?

variables.tf

variables.tf 用来定义变量,比如变量名,类型,有点像写代码时函数的参数定义。

在以下范例文件中我定义了两个变量 project 和 environment,他们的类型是 string。

# variables.tf
# Input variable definitions

variable "project" {
  description = "project name"
  type = string
}

variable "environment" {
  description = "the environment of project, e.g. production, sandbox, staging"
  type = string
}

terraform.tfvars

terraform.tfvars 类似于一个 .env 文件,保存了一些 key-value,用来批量给变量赋值。

project = "paylocity"
environment = "sandbox"

参考资料

  1. Stack Overflow: terraform.tfvars vs variables.tf difference [duplicate]
  2. Stack Overflow: What is the difference between variables.tf and terraform.tfvars?
  3. Stack Overflow: Terraform: how to declare a variable as required (or optional) in variables.tf?

原文: https://mednoter.com/terraform-variable-files.html

其实文件的组织方式,只是方便人类组织代码。对于 terraform 来讲,它会把所有的 .tf 文件合并为一个。

可以以 TF_VAR_name 这种形式的环境变量给变量设置值, .tfvars 文件可以不用放进版本库。 TF_VAR_name

.tfvars 的一个使用场景就是把测试环境工作目录下的 .tf 文件全部复制到生产环境,改改 .tfvars ,就能搭建出一致的生产环境了。

另外墙裂推荐已经免费了的 Terraform Cloud 存储 remote state

xinyifly 回复

原来 Terraform Cloud 已经免费了呀,那真是太好了,我现在用的 S3 保存 state,DynamoDB 做 exclusive lock

xinyifly 回复

刚才看了一下,Terraform Cloud 免费版本有 5 个名额的限制。

xiaoronglv 回复

我没注意看到 5 个名额 😂

需要 登录 后方可回复, 如果你还没有账号请 注册新账号