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

时间:2019-06-26 13:49:12

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

我正在使用我的同事编写的模块,但是由于某种原因,我找不到子网-标识符以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-开头吗?

1 个答案:

答案 0 :(得分:1)

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

此外,您似乎并没有使用它,因此不需要那里的splat运算符。

所以代替:

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

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

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