在 Terraform v0.11.14 中按名称对子网进行排序

Sorting subnets by name in Terraform v0.11.14

我正在尝试按名称获取子网列表,过滤掉以“d”结尾的子网(对于“d”可用区),然后获取 Terraform v0 中剩余子网的 ID .11.14.这就是我创建子网的方式:

resource "aws_subnet" "private" {
  vpc_id            = "${var.vpc_id}"
  cidr_block        = "${element(split(",", var.cidrs), count.index)}"
  availability_zone = "${element(split(",", var.azs), count.index)}"
  count             = "${length(split(",", var.cidrs))}"

  tags      { Name = "${var.name}.${element(split(",", var.azs), count.index)}" }
  lifecycle { create_before_destroy = true }
}

我知道如何在 Terraform v1.0.0 中实现我的结果:

output "subnet_ids" { value = "${join(",", list(for subnet in aws_subnet.private.*: subnet.id if substr(subnet.name, -1, 1) != "d" ))}" }

我试图在 Terraform v0.11.14 中做同样的事情,只是切断最后一个子网,希望子网默认按名称排序,但它们不是:

output "subnet_ids" { value = "${join(",", slice(aws_subnet.private.*.id, 0, length(aws_subnet.private.*.id) - 1))}" }

有人知道如何使用 Terraform v0.11.14 实现我想要做的事情吗?

您可以查看以下内容。据我了解,您的过滤是基于 AZ 名称的最后一个字母。因此,也许您可​​以按 AZ 排序,并删除最后一个,就像您尝试的那样:

locals {
    sorted_az  = "${sort(aws_subnet.private.*.availability_zone)}"
    length_az_minus_1  = "${length(local.sorted_az)-1}"
    azs_without_last = "${slice(local.sorted_az, 0, local.length_az_minus_1)}"   
}

output "subnet_ids" { 
  value = "${ matchkeys(aws_subnet.private.*.id, aws_subnet.private.*.availability_zone, local.azs_without_last)}"
}