Terraform 如何将标记映射应用于aws_autoscaling_组?

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设

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

  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
    }
  }

}