【问题标题】:terraform.tfvars file: why variable block is requiredterraform.tfvars 文件:为什么需要变量块
【发布时间】:2019-03-20 13:55:36
【问题描述】:

我创建了以下 terraform.tfvars 文件:

ec2_image = "ami-00035f41c82244dab"
ec2_instance_type = "t2.micro"

并在 main.tf 文件中按如下方式使用它:

resource "aws_instance" "OneServer" {
    ami             =       "${var.ec2_image}"
    instance_type   =       "${var.ec2_instance_type}"
}

然后我执行“terraform plan”命令,它抱怨:

错误:资源“aws_instance.OneServer”配置:未知变量 参考:'ec2_image';用“变量”块定义它

所以我把main.tf文件改成如下:

variable "ec2_image" {}
variable "ec2_instance_type" {}

resource "aws_instance" "OneServer" {
    ami             =       "${var.ec2_image}"
    instance_type   =       "${var.ec2_instance_type}"
}

那么命令“terraform plan”就可以正常工作了。

我不明白为什么需要这些变量块。这样做有什么意义?

【问题讨论】:

  • 我知道,显然看过了。但是在哪里提到-当使用 tfvars 文件时- tf 文件中仍然需要变量块。我完全理解使用 tf 变量文件时需要变量块,但使用 tfvars 变量文件时不需要。
  • 我不确定我是否理解您的后续问题,但@MattSchuchard 发布的链接对此进行了解释。您必须在链接语法中定义所有输入变量(可选地包括默认值和/或类型),然后如果您愿意,您可以使用包括 tfvars 文件在内的多个选项或通过 CLI 传递 var 来覆盖/设置这些变量的值或使用TF_VAR_ 环境变量。

标签: terraform


【解决方案1】:

你真的在使用-var-file 命令行开关吗?

例如,我不使用那个开关——我只是在一个随机的tf 文件(在我的例子中命名为variable.tf)中定义我的可覆盖变量。如果未使用 -var-file 开关,则意味着需要 variable 块来告诉 Terraform 何时定义变量。

【讨论】:

  • -var-file 用于传递 Terraform 不会自动加载的 tfvars 样式文件(terraform.tfvars*.auto.tfvars)b 所以这不能回答问题。
猜你喜欢
  • 1970-01-01
  • 2015-08-17
  • 2014-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多