首页 > 解决方案 > 如何在不使用 terraform 中的计数的情况下获取列表中的多个值?

问题描述

我正在使用 terraform 中的计数创建多个资源。例如:

resource "aws_subnet" "rSubnetMGMT" {
  count = length(var.vletter)
  availability_zone = "${var.vRegion}${var.vletter[count.index]}"
  vpc_id     = aws_vpc.rVPCMGMT.id
  cidr_block = var.vSubnetMGMTCIDR
  map_public_ip_on_launch = "true"

  tags = {
    Name = "${var.vWorkloadShortCode}-mgmt-MGMT- ${var.vRegion}${var.vletter[count.index]}"
    SubnetType = "MGMT"

  }
}

这里 vletter = ["a","b","c"] 所以这会为每个可用区创建 3 个子网现在我想创建一个“aws_autoscaling_group”,它需要一个 vpc_zone_identifier 列表,即我创建的子网 ID

resource "aws_autoscaling_group" "rAutoScalingGroup" {
  count = lenght(var.vletter)
  max_size                  = var.vMaxNoofInstances
  min_size                  = var.vMinNoofInstances
  launch_configuration      = aws_launch_configuration.rLaunchConfiguration.name
  vpc_zone_identifier       = [aws_subnet.rSubnetMGMT[count.index].id ]
  metrics_granularity       = 1Minute
  enabled_metrics           = [GroupInServiceInstances]
  load_balancers = aws_elb.rLoadBalancer.name

  tag {
    Name                 = "${var.vInstanceShortNameBAS}-asg"
  }
}

但是如果我在创建资源(aws_autoscaling_group)时使用计数,它将创建多个资源,即为每个子网创建 3 个不同的自动缩放组,但在这里我只想要我之前创建的所有子网 ID。如何在不创建多个资源的情况下实现这一目标?

标签: amazon-web-servicesterraformterraform-provider-aws

解决方案


您可以使用 splat 运算符:aws_subnet.rSubnetMGMT.*.id它将解析为已创建子网的 ID 列表。


推荐阅读