Terraform resource_aws_vpc_endpoint Список DNS пуст - PullRequest
0 голосов
/ 28 января 2020

Я использую terraform 0.12 и пытаюсь настроить конечную точку vp c для другого VP C. Когда я пытаюсь настроить запись псевдонима маршрута 53, я всегда получаю сообщение об ошибке, указывающее, что dns_entry - пустой список. Я что-то упускаю здесь очевидное. Если после этого я повторно выполню команду apply, она заполнит запись DNS без проблем.

resource "aws_vpc_endpoint" "endpoint" {
  vpc_id            = "${local.vpc_id}"
  service_name      = "${var.service_endpoint}"
  vpc_endpoint_type = "Interface"
  security_group_ids = [
    "${aws_security_group.privatelink.id}",
  ]
}

resource "aws_vpc_endpoint_subnet_association" "tk-subnet-assc" {
  count           = (var.endpoint_subnet_count)
  vpc_endpoint_id = "${aws_vpc_endpoint.endpoint.id}"
  subnet_id       = "${local.vpc_private_subnets[count.index]}"
}

resource "aws_route53_zone" "hz" {
  name          = "${var.privatelink_dns_zone}"
  force_destroy = true
  vpc {
    vpc_id = "${local.vpc_id}"
  }
}

resource "aws_route53_record" "tk" {
  zone_id = "${aws_route53_zone.hz.zone_id}"
  name    = "${var.privatelink_dns_name}.${var.privatelink_dns_zone}"
  type    = "CNAME"
  ttl     = "300"
  records = ["${lookup(aws_vpc_endpoint.endpoint.dns_entry[0], "dns_name")}"]
}

Ошибка: неверный индекс

 on main.tf line 55, in resource "aws_route53_record" "tk":
  55:   records = ["${lookup(aws_vpc_endpoint.endpoint.dns_entry[0], "dns_name")}"]
    |----------------
    | aws_vpc_endpoint.endpoint.dns_entry is empty list of object

The given key does not identify an element in this collection value.

1 Ответ

1 голос
/ 28 января 2020

Посмотрев ближе на провайдера AWS terraform, я понял это. Когда чтение выполняется через API, оно выполняется сразу после создания конечной точки, потому что я решил создать ассоциации su bnet после конечной точки, чтение конечной точки не включает их и никогда не перечитывается. Чтобы решить эту проблему, добавьте subnet_ids непосредственно в конечную точку. Пример ниже:

resource "aws_vpc_endpoint" "endpoint" {
  vpc_id            = "${local.vpc_id}"
  service_name      = "${var.service_endpoint}"
  vpc_endpoint_type = "Interface"
  security_group_ids = [
    "${aws_security_group.privatelink.id}",
  ]
  subnet_ids = ["${local.vpc_private_subnets[0]}", "${local.vpc_private_subnets[1]}"]
}

resource "aws_route53_zone" "hz" {
  name          = "${var.privatelink_dns_zone}"
  force_destroy = true
  vpc {
    vpc_id = "${local.vpc_id}"
  }
}

resource "aws_route53_record" "tk" {
  zone_id = "${aws_route53_zone.hz.zone_id}"
  name    = "${var.privatelink_dns_name}.${var.privatelink_dns_zone}"
  type    = "CNAME"
  ttl     = "300"
  records = ["${lookup(aws_vpc_endpoint.endpoint.dns_entry[0], "dns_name")}"]
}
...