Невозможно сослаться на vpc_id для подсети в модулях - PullRequest
0 голосов
/ 26 сентября 2018

Имеются конфигурации модулей / сети / testvpc и модулей / сети / подсети.

основная папка / модули / сеть / testvpc / main.tf

    variable "vpccidr" {type="list"}
    variable "vpcname" {type="list"}

   resource "aws_vpc" "customVpc" {
   count = "${length(var.vpccidr)}"
   cidr_block = "${element(var.vpccidr,count.index)}"

    tags {
    Name = "${element(var.vpcname,count.index)}"
    }

основная папка / модули / сеть/subnet/main.tf

variable "subcidr" {type="list"}
variable "subname" {type="list"}

resource "aws_subnet" "subnet" {
count = "${length(var.subcidr)}"
vpc_id = "${element(aws_vpc.customVpc.*.id, count.index)}"
cidr_block = "${element(var.subcidr, count.index)}"

tags {

Name = "${element(var.subname, count.index)}"
}
 }

mainfolder / main.tf

module "testvpc" {
source = "./modules/network/testvpc"
vpccidr="${var.vpccidr}"
vpcname="${var.vpcname}"
}

module "subnet" {
source = "./modules/network/subnet"
subcidr = "${var.subcidr}"
subname = "${var.subname}"
} 

mainfolder / var.tf

  variable "vpccidr" {type="list"}
  variable "vpcname" {type="list"}
  variable "subcidr" {type="list"}
  variable "subname" {type="list"}

mainfolder / terraform.tfvars

 - vpccidr=["10.1.0.0/16","10.2.0.0/16","10.3.0.0/16"]   
   vpcname=["vpc-shared","vpc-sand","vpc-preprod"]   
   subcidr=["10.1.1.0/24","10.2.1.0/24","10.3.1.0/24"]   
   subname=["sub-shared","sub-sand","sub-preprod"]
 - 

Во время запуска terraform validate -var-file = terraform.tfvars выдает следующую ошибку

            Error: resource 'aws_subnet.subnet' config: unknown 
           resource 'data.aws_vpc.customVpc' referenced in variable 
           data.aws_vpc.customVpc.*.id

Это потому, что aws_subnet не может найти vpc_id, так как ресурс aws_vpc не создан, поэтому он,Я называю testvpc и подсеть как модули в mainfolder / main.tf.Чего мне не хватает.

Во-вторых, это цикл в собственно aws_vpc и aws_subnet.Он должен создать vpc-shared 10.1.0.0/16 и sub-shared внутри этого vpc и т. Д.

1 Ответ

0 голосов
/ 26 сентября 2018

Вам необходимо использовать выходы модуля , потому что вы пытаетесь ссылаться на ресурсы в отдельном модуле.Это не сработает, потому что

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

Так что в mainfolder / modules / network / testvpc / main.tf , добавьте вывод примерно так

output "vpc_ids" { value=["${aws_vpc.customVpc.*.id}"] }

Затем добавьте переменную в mainfolder / modules / network / subnet / main.tf примерно так

variable "vpc_ids" {type="list"}

ииспользуйте его в этом модуле (вместо попытки напрямую ссылаться на ресурсы из модуля / testvpc / main.tf )

resource "aws_subnet" "subnet" {
  count = "${length(var.subcidr)}"
  vpc_id = "${element(var.vpc_ids, count.index)}"

  etc, etc

}

и, наконец, теперь из вашей mainfolder / main.тф

module "testvpc" {
  source = "./modules/network/testvpc"
  vpccidr="${var.vpccidr}"
  vpcname="${var.vpcname}"
}

module "subnet" {
  source = "./modules/network/subnet"
  subcidr = "${var.subcidr}"
  subname = "${var.subname}"
  vpc_ids = "${module.testvpc.vpc_ids}"
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...