Почему источник данных моей подсети возвращает 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-?


person Yamikuronue    schedule 26.06.2019    source источник
comment
Вы уверены, что именно так передаете его в модуль? aws_subnet_ids не имеет аргумента или атрибута id, поэтому Terraform должен генерировать исключение. Кроме того, похоже, что вы не используете count, поэтому вам не нужен оператор splat, который у вас есть. В общем, я ожидал, что это будет data.aws_subnet_ids.ids вместо того, что вы показываете.   -  person ydaetskcoR    schedule 26.06.2019
comment
@ydaetskcoR Я определенно уверен, что это то, как я его передаю, поскольку я скопировал и вставил, но я не уверен, что это правильно, лол. Для нескольких найденных подсетей должно быть несколько идентификаторов. Может быть, в этом проблема; Я поиграю с этим и посмотрю   -  person Yamikuronue    schedule 26.06.2019
comment
Этот источник данных используется не так. Если бы вы перебирали несколько aws_subnet источников данных с count, тогда да, это работало бы так, но вместо этого вы используете aws_subnet_ids источник данных, к которому следует обращаться, как указано в последнем комментарии.   -  person ydaetskcoR    schedule 26.06.2019
comment
@ydaetskcoR, если вы дадите такой ответ, я приму его, это была проблема. Я слишком усердно конвертировал в 0,12 и забыл, насколько разные источники данных.   -  person Yamikuronue    schedule 26.06.2019


Ответы (1)


Источник данных aws_subnet_ids не имеет аргумента или атрибута id, поэтому Terraform должен генерировать исключение, и я немного удивлен, что он этого не делает.

Кроме того, похоже, вы не используете счетчик, поэтому вам не нужен оператор splat, который у вас есть.

Так что вместо:

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

Вы должны использовать атрибут ids, чтобы получить список всех идентификаторов подсетей, соответствующих вашему фильтру:

private_subnets = "${data.aws_subnet_ids.app.ids}"
person ydaetskcoR    schedule 26.06.2019