如何将标记映射应用于aws_autoscaling_group



https://www.terraform.io/docs/providers/aws/r/autoscaling_group.html#propagate_at_launch

我这样做是为了将标签应用于aws资源:

tags = "${merge(
local.common_tags, // reused in many resources
map(
"Name", "awesome-app-server",
"Role", "server"
)
)}"

但是asg需要propagate_at_launch字段。

我已经在许多其他资源中使用了我的标签映射,我想在asg资源中重用它。我肯定会一直将propagate_at_launch设置为true。如何将其添加到映射的每个元素中,并将其用于tags字段?

我使用一个null资源来完成这项工作,并将其输出作为标记,示例如下-

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_tags

重要更新Terraform 0.12+。它现在支持动态嵌套块和。如果您使用的是0.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
}
}
}

相关内容

  • 没有找到相关文章

最新更新