1

当我尝试通过运行此 tf 文件动态分配子网 ID 时:

  data "aws_availability_zones" "available" {}

  resource "aws_vpc" "wpl_vpc" {
    cidr_block             = var.vpc_cidr
    enable_dns_hostnames   = true
      tags = {
          Name             = "WPL-VPC"
          CreatedBy        = var.created_by
      }
  }
  resource "aws_subnet" "wpl_public_subnet" {
    for_each                = { for index, az_name in data.aws_availability_zones.available.names : index => az_name }
    vpc_id                  = aws_vpc.wpl_vpc.id
    cidr_block              = cidrsubnet(var.vpc_cidr, 8, each.key + 10)
    availability_zone       = data.aws_availability_zones.available.names[each.key]
    map_public_ip_on_launch = true
      tags = {
          Name              = "WPL-PublicSubnet"
          CreatedBy         = var.created_by
      }
  }
  output "wpl_public_subnet_ids" {
  value = [aws_subnet.wpl_public_subnet.*.id]
  }

我收到一个错误:

     Error: Unsupported attribute
       on ../modules/vpc/outputs.tf line 5, in output "wpl_public_subnet_ids":
        5:   value = [aws_subnet.wpl_public_subnet.*.id]
     This object does not have an attribute named "id".

但是,如果我用这个替换输出,一切都像魅力一样:

aws_subnet.wpl_public_subnet.0.id

如何输出所有子网 ID 值?

4

1 回答 1

2

由于您使用的是for_each,因此您将拥有一张地图,而不是列表。因此,在获取s 之前,您必须先获取id。你也不需要额外的方括号:

output "wpl_public_subnet_ids" {
  value = values(aws_subnet.wpl_public_subnet)[*].id
}
于 2020-12-21T22:17:30.600 回答