这是我的设置,
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”之后才能确定的值。
我犯了什么错误,我看不到任何语法,但是在访问变量时遇到问题,任何指针都将有所帮助
谢谢
答案 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_region
和amis
命名为惯例。
此外,如果您的目标是为 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"
}