【问题标题】:Unable to read variables from Terraform variable file无法从 Terraform 变量文件中读取变量
【发布时间】:2019-12-05 12:55:25
【问题描述】:

这是我的设置,

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 控制台

var.AWS_REGION

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

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

谢谢

【问题讨论】:

    标签: terraform terraform-provider-aws


    【解决方案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_region 和 amis 会更常规。

    此外,如果您的目标是为 当前 区域(由 AWS_DEFAULT_REGION 环境变量或在提供程序配置中选择的区域)找到一个 AMI,您可以使用 the aws_region data source 来允许 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"
    }
    

    【讨论】:

    • 谢谢马丁,用“auto.tfvars”重命名文件有帮助。我是 Terraform 的新手,早期的项目使用过 Ansible,我正在尝试采用 terraform 作为基础设施自动化的一部分。我将在链接上进一步阅读。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 2021-08-12
    • 1970-01-01
    • 2018-11-24
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多