这是我的设置,
地形版本 - 地形 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"
执行
$ 地形控制台
变种。AWS_REGION
错误:结果取决于在"地形应用"之后才能确定的值。
我犯了什么错误,我没有看到任何语法,但在访问变量时遇到问题,任何指针都会有所帮助
谢谢
Terraform 不会自动读取.tfvars
文件,除非其文件名以.auto.tfvars
结尾。正因为如此,当您在没有参数的情况下运行terraform console
时,Terraform 不知道变量AWS_REGION
的值。
要保留现有的文件名,您可以在命令行上显式传递此变量文件,如下所示:
terraform console -var-file="awsVars.tfvars"
或者,您可以将文件重命名为awsVars.auto.tfvars
然后 Terraform 默认读取它,只要它在运行 Terraform 时位于当前工作目录中。
有关如何为根模块输入变量设置值的详细信息,请参阅 Terraform 文档部分为根模块变量赋值。
另请注意,输入变量和其他特定于 Terraform 的对象通常的命名约定是将名称保留为小写,并用下划线分隔单词。例如,将变量命名为aws_region
和amis
会更常规。
此外,如果您的目标是查找当前区域(由AWS_DEFAULT_REGION
环境变量或在提供程序配置中选择的区域(的 AMI,则可以使用aws_region
数据源允许 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"
}