Среда Terraform EB не находит подсеть с явной зависимостью - PullRequest
0 голосов
/ 06 июня 2019

У меня есть конфигурация Terraform с различными ресурсами AWS в одном файле, включая VPC, три частные, три общедоступные подсети и среду EB.

Моя версия Terraform - 0.12.0, и поставщик AWSверсия ~> 2.12 VPC выглядит следующим образом:

resource "aws_vpc" "terraform-vpc" {
  cidr_block                       = "${var.cidr_block}"
  assign_generated_ipv6_cidr_block = true
}

Мои шесть подсетей выглядят так:

resource "aws_subnet" "private-a" {
  vpc_id            = "${aws_vpc.terraform-vpc.id}"
  availability_zone = "eu-west-2a"
  cidr_block        = "10.0.1.0/24"
}

resource "aws_subnet" "public-a" {
  vpc_id            = "${aws_vpc.terraform-vpc.id}"
  availability_zone = "eu-west-2a"
  cidr_block        = "10.0.2.0/24"
}

resource "aws_subnet" "private-b" {
  vpc_id            = "${aws_vpc.terraform-vpc.id}"
  availability_zone = "eu-west-2b"
  cidr_block        = "10.0.3.0/24"
}

resource "aws_subnet" "public-b" {
  vpc_id            = "${aws_vpc.terraform-vpc.id}"
  availability_zone = "eu-west-2b"
  cidr_block        = "10.0.4.0/24"
}

resource "aws_subnet" "private-c" {
  vpc_id            = "${aws_vpc.terraform-vpc.id}"
  availability_zone = "eu-west-2c"
  cidr_block        = "10.0.5.0/24"
}

resource "aws_subnet" "public-c" {
  vpc_id            = "${aws_vpc.terraform-vpc.id}"
  availability_zone = "eu-west-2c"
  cidr_block        = "10.0.6.0/24"
}

Затем в моем ресурсе aws_elastic_beanstalk_environment у меня есть:

...

setting {
    namespace = "aws:ec2:vpc"
    name      = "Subnets"
    value     = "#{aws_subnet.private-a.id},#{aws_subnet.private-b.id},#{aws_subnet.private-c.id}"
}

setting {
   namespace = "aws:ec2:vpc"
   name      = "ELBSubnets"
   value     = "#{aws_subnet.public-a.id},#{aws_subnet.public-b.id},#{aws_subnet.public-c.id}"
}

...

depends_on = [
  aws_security_group.default, # created earlier in the same file
  aws_subnet.public-a,
  aws_subnet.public-b,
  aws_subnet.public-c,
  aws_subnet.private-a,
  aws_subnet.private-b,
  aws_subnet.private-c
]

Проблема в том, что я всегда получаю сообщение об ошибке, что одна из подсетей не существует, например:

Error: ConfigurationValidationException: Configuration validation exception: 
Invalid option value: '["#{aws_subnet.private-c.id}","#{aws_subnet.private-b.id}","#{aws_subnet.private-a.id}"]' 
(Namespace: 'aws:ec2:vpc', OptionName: 'Subnets'): The subnet '#{aws_subnet.private-c.id}' does not exist.

Она всегда связана с другой подсетью, иногда одной из частных, используемых дляопция Subnets, иногда одна из общедоступных, используемых в опции ELBSubnets.

Меня сбивает с толку то, что я явно определил их как зависимости, хотя я думаю, что это должно работать даже без явногозависимость.А в журналах terraform apply все подсети всегда создаются до среды eb:

aws_subnet.private-c: Creation complete after 1s [id=subnet-some-id]
aws_subnet.public-a: Creation complete after 1s [id=subnet-some-id]
aws_subnet.public-c: Creation complete after 1s [id=subnet-some-id]
aws_subnet.public-b: Creation complete after 1s [id=subnet-some-id]
aws_subnet.private-a: Creation complete after 6s [id=subnet-some-id]
aws_subnet.private-b: Creation complete after 6s [id=subnet-some-id]

...

aws_elastic_beanstalk_environment.default: Creating...

После регистрации в AWS все подсети создаются, как ожидается, и согласно apply.В чем может быть причина этой ошибки?

1 Ответ

0 голосов
/ 06 июня 2019

Как ydaetskcor упомянул в интерполяции подсетей и использовал # вместо $, поэтому #{aws_subnet.public-a.id},#{aws_subnet.public-b.id} должно быть ${aws_subnet.public-a.id},${aws_subnet.public-b.id}.

...