【问题标题】:Terraform, passing few subnets to autosecaling groupTerraform,将几个子网传递给自动缩放组
【发布时间】:2020-08-27 17:20:24
【问题描述】:

有一个定义子网的代码如下:

resource "aws_subnet" "public" {
  count = length(data.aws_availability_zones.available.names)

  vpc_id                  = aws_vpc.main_vpc.id
  cidr_block              = cidrsubnet(var.vpc_cidr, 8, count.index)
  availability_zone       = element(data.aws_availability_zones.available.names, count.index)
  map_public_ip_on_launch = true

  tags = {
    Name = "${var.environment}-public-${element(data.aws_availability_zones.available.names, count.index)}"
  }
}

以后有代码定义自动缩放组:

resource "aws_autoscaling_group" "ec2_testing" {
  availability_zones  = [data.aws_availability_zones.available.names[0]]
  vpc_zone_identifier = [element(aws_subnet.public.*id, count.index),]
  desired_capacity    = 1
  max_size            = 1
  min_size            = 1

  launch_template {
    id      = aws_launch_template.ec2_testing.id
    version = "$Latest"
  }
}

我遇到了错误:

需要用逗号将每个函数参数与下一个函数参数分开。

编辑:只需要分配一个子网。

应该如何更正vpc_zone_identifier?请帮忙。

【问题讨论】:

  • aws_subnet.public.*id 应该是 aws_subnet.public.*.id。此外,如果您还指定了 vpc_zone_identifier,则不应指定 availability_zones 参数,因为它是不必要的并且会使逻辑复杂化(您当前的示例将失败,因为这些子网并不都在同一个 AZ 中)。
  • 您要么需要count 上的aws_autoscaling_group 才能使用count.index,要么只需要使用aws_subnet.public.*.id[0],就像您使用列表中的第一个可用区一样上述参数中的区域。
  • ydaetskcoR - 提供了正确答案。
  • 谢谢@ydaetskcoR

标签: amazon-web-services terraform terraform-provider-aws


【解决方案1】:

就像提到的 ydaetskcoR 一样,应该采取两种行动:

aws_subnet.public.*id 应该是 aws_subnet.public.*.id。还有你 如果您是,则不应指定 availability_zones 参数 还指定 vpc_zone_identifier 因为它是不必要的,并且会 复杂的逻辑(您当前的示例将失败,因为这些子网 不都在同一个AZ)

您要么需要依靠 aws_autoscaling_group 才能 使用 count.index 或者你只需​​要使用 aws_subnet.public.*.id[0] 类似于您如何使用区域列表中的第一个 AZ 以上参数。

添加这个以提高可见性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-20
    • 2021-10-26
    • 2018-09-07
    • 1970-01-01
    • 2021-04-12
    • 2021-08-22
    • 1970-01-01
    • 2018-02-10
    相关资源
    最近更新 更多