为什么我的子网数据源返回 VPC?

Why is my subnet data source returning a VPC?

我正在使用我的同事编写的模块,但由于某种原因,我发现找不到子网 -- 并且标识符以 vpc- 开头。为什么这会返回 VPC 而不是子网?

data "aws_subnet_ids" "app" {
  vpc_id = "${data.aws_vpc.default.id}"

  tags = {
    SubnetType = "app"
  }
}

作为

传递给模块

private_subnets = "${data.aws_subnet_ids.app.*.id}"

并在此处使用:

resource "aws_autoscaling_group" "default-alb" {
  name                 = "${chomp(data.template_file.standard_name.rendered)}"
  launch_configuration = tostring(element(aws_launch_configuration.default,count.index).name)
  min_size             = "${var.min_instances}"
  max_size             = "${var.min_instances}"

  target_group_arns = [
    tostring(element(aws_alb_target_group.default-http,count.index).arn),
  ]

  vpc_zone_identifier = var.private_subnets

  lifecycle {
    create_before_destroy = true
  }
}

但是我得到错误:

Error: Error creating AutoScaling Group: ValidationError: The subnet ID 'vpc-004[redacted]' does not exist
    status code: 400, request id: 73e98545-975c-11e9-bd63-fd4915ceeabf

  on .terraform/modules/core-api/alb.tf line 1, in resource "aws_autoscaling_group" "default-alb":
   1: resource "aws_autoscaling_group" "default-alb" {

子网标识符不应该以 subnet- 开头吗?

aws_subnet_ids 数据源没有 id 参数或属性,因此 Terraform 应该在那里抛出异常,我有点惊讶它没有这样做。

此外,您似乎没有在上面使用计数,因此不需要那里的 splat 运算符。

所以代替:

private_subnets = "${data.aws_subnet_ids.app.*.id}"

您应该使用 ids 属性来 return 与您的过滤器匹配的所有子网 ID 的列表:

private_subnets = "${data.aws_subnet_ids.app.ids}"