Terraform 如何将标记映射应用于aws_autoscaling_组?
我这样做是为了将标记应用于aws资源:Terraform 如何将标记映射应用于aws_autoscaling_组?,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我这样做是为了将标记应用于aws资源: tags = "${merge( local.common_tags, // reused in many resources map( "Name", "awesome-app-server", "Role", "server" ) )}" 但是asg需要在发射场传播 我已经在许多其他资源中使用了我的标记映射,我希望将其重新用于asg资源。我很确定我会一直将propagate_at_launch设
tags = "${merge(
local.common_tags, // reused in many resources
map(
"Name", "awesome-app-server",
"Role", "server"
)
)}"
但是asg需要在发射场传播
我已经在许多其他资源中使用了我的标记映射,我希望将其重新用于asg资源。我很确定我会一直将propagate_at_launch设置为true。如何将其添加到地图的每个元素中,并将其用于
标记
字段?我使用空资源,并将其输出作为标记,示例如下-
data "null_data_source" "tags" {
count = "${length(keys(var.tags))}"
inputs = {
key = "${element(keys(var.tags), count.index)}"
value = "${element(values(var.tags), count.index)}"
propagate_at_launch = true
}
}
resource "aws_autoscaling_group" "asg_ec2" {
..........
..........
lifecycle {
create_before_destroy = true
}
tags = ["${data.null_data_source.tags.*.outputs}"]
tags = [
{
key = "Name"
value = "awesome-app-server"
propagate_at_launch = true
},
{
key = "Role"
value = "server"
propagate_at_launch = true
}
]
}
您可以将var.tags
替换为local.common_标签
Terraform 0.12+的重要更新。它现在支持动态嵌套
块和每个。如果您使用的是0.12+版本,请使用以下代码-
+1用于更新。如果发现了空资源方法,而它甚至不适用于Terraform 12,那么动态方法更具可读性,更少黑客攻击。
resource "aws_autoscaling_group" "asg_ec2" {
..........
..........
lifecycle {
create_before_destroy = true
}
tag {
key = "Name"
value = "awesome-app-server"
propagate_at_launch = true
}
tag {
key = "Role"
value = "server"
propagate_at_launch = true
}
dynamic "tag" {
for_each = var.tags
content {
key = tag.key
value = tag.value
propagate_at_launch = true
}
}
}