我目前有一些看起来像这样的地形:
resource "aws_autoscaling_group" "my_asg" {
...
tag {
key = "ManagedBy"
value = "Terraform"
propagate_at_launch = true
}
}
问题是此代码块非常大,并且多个ASG中共有许多标签,因此,为了将其缩小到更易于管理并减少重复的位置,我想对这些通用标签执行类似的操作:
resource "aws_autoscaling_group" "my_asg" {
...
tag = "${var.managed_by_tag}"
}
variable "managed_by_tag" {
type = "map"
default = {
key = "ManagedBy"
value = "Terraform"
propagate_at_launch = true
}
}
不幸的是,当我对此运行terraform apply
时,出现以下错误:
Error: Error loading C:\path\to\file.tf: Error reading config for aws_autoscaling_group[my_asg]: At 32:9: unknown slice type: *ast.LiteralType
从该错误看来,问题似乎在于它试图将错误类型的东西(在这种情况下为地图)放置在不属于该地方的地方。但是令我感到困惑的是,以下内容可以正常工作,并暗示(至少对我来说是地形新手)这里的地图应该可以:
resource "aws_autoscaling_group" "my_asg" {
...
tag = {
key = "ManagedBy"
value = "Terraform"
propagate_at_launch = true
}
}
所以我的问题是:
答案 0 :(得分:2)
靠近tag = "${var.managed_by_tag}"
:
您正在将地图插入一个字符串,然后尝试在Terraform需要地图的地方使用该字符串。
尝试以下方法:
resource "aws_autoscaling_group" "my_asg" {
...
tag = var.managed_by_tag
}
答案 1 :(得分:0)
正确地声明了用于通用标签的变量,这就是将其传递到标签代码块的方式。您尝试插入的方式会传递错误的标签类型,如果您使用合并功能,则会以正确的格式返回它。您可以在下面的文档中看到它,
tags = "${merge(var.managed_by_tag)}"