无法从Terraform变量文件中读取变量

时间:2019-12-04 23:06:27

标签: terraform terraform-provider-aws

这是我的设置,

Terraform版本-Terraform v0.12.17 操作系统-OSX 10.15.1

用例-定义提供程序文件并访问vars文件中定义的变量

文件 main.tf-代码位于

provider "aws" {

}

variable "AWS_REGION" {
    type = string
}

variable "AMIS" {
    type = map(string)
    default = {
        us-west-1 = "my ami"
    }
}

resource "aws_instance" "awsInstall" {
    ami = var.AMIS[var.AWS_REGION]
    instance_type = "t2.micro"
}

awsVars.tfvars-定义区域的地方

AWS_REGION="eu-region-1"

执行

$ terraform控制台

  
    

AWS_REGION变种

  
     

错误:结果取决于直到“ terraform apply”之后才能确定的值。

我犯了什么错误,我看不到任何语法,但是在访问变量时遇到问题,任何指针都将有所帮助

谢谢

1 个答案:

答案 0 :(得分:1)

Terraform不会自动读取.tfvars文件,除非其文件名以.auto.tfvars结尾。因此,当您不带参数运行terraform console时,Terraform不知道变量AWS_REGION的值。

要保留现有文件名,您可以像下面这样在命令行上显式传递此变量文件:

terraform console -var-file="awsVars.tfvars"

或者,您可以将文件重命名为awsVars.auto.tfvars,然后在运行Terraform时,只要它在当前工作目录中,Terraform就会默认读取它。

在Terraform文档部分Assigning Values to Root Module Variables中,有更多有关如何为根模块输入变量设置值的信息。


还请注意,输入变量和其他特定于Terraform的对象的常规命名约定是将名称保留为小写字母,并在各个单词之间使用下划线。例如,将变量aws_regionamis命名为惯例。

此外,如果您的目标是为 current 区域(由AWS_DEFAULT_REGION环境变量或在提供程序配置中选择的区域)找到AMI,则可以使用{{ 3}}允许Terraform自动确定,因此您完全不必将其设置为变量:

variable "amis" {
  type = map(string)
  default = {
    us-west-1 = "my ami"
  }
}

data "aws_region" "current" {}

resource "aws_instance" "awsInstall" {
  ami           = var.amis[data.aws_region.current.name]
  instance_type = "t2.micro"
}