У меня есть модуль, который создает переменное количество стеков CloudFormation.Это работает просто отлично, но у меня возникают проблемы при попытке использовать вывод стека в качестве вывода в модуле.Стек создает подсеть, и я указываю созданный идентификатор подсети как вывод стека.Затем я хочу вернуть список всех идентификаторов подсети как часть вывода модуля.Вот как я думаю, что мой вывод должен выглядеть так:
output "subnets" {
value = ["${aws_cloudformation_stack.subnets.*.outputs["Subnet"]}"]
}
Когда я это делаю, я получаю целочисленную ошибку разбора.Terraform, похоже, рассматривает результаты как список, а не как карту.Есть ли способ заставить это работать?
Редактировать: Вот где я объявляю стеки:
resource "aws_cloudformation_stack" "subnets" {
count = "${local.num_zones}"
name = "Subnet-${element(local.availability_zones, count.index)}"
on_failure = "DELETE"
template_body = "${file("${path.module}/templates/subnet.yaml")}"
parameters {
CIDR = "${cidrsubnet(var.cidr,ceil(log(local.num_zones * 2, 2)), count.index)}"
AZ = "${element(local.availability_zones, count.index)}"
VPC = "${aws_cloudformation_stack.vpc.outputs["VPCId"]}"
}
}
Затем в файле subnet.yaml есть вывод стека, который имеет ключ Subnet и является идентификатором подсети, которая была создана..
Все стеки созданы успешно, но я не могу экспортировать все созданные идентификаторы подсетей из моего модуля terraform.Не уверен, почему terraform рассматривает * .outputs как список, а * * outputs ["Subnet"] как список.Я предполагаю, что * .outputs конвертируется в список карт, но мне нужен список определенного ключа (подсети) на карте.
У меня есть не список примеров, работающих для стека и использующихвывод из стека как вывод модуля terraform:
resource "aws_cloudformation_stack" "vpc" {
name = "${var.name_prefix}-VPC"
on_failure = "DELETE"
template_body = "${file("${path.module}/templates/vpc.yaml")}"
parameters {
CIDR = "${var.cidr}"
}
}
output "vpc" {
value = "${aws_cloudformation_stack.vpc.outputs["VPCId"]}"
}
Мне удалось обойти эту проблему, объявив данные для поиска подсетей после создания.Это не идеально, но заставляет меня пройти мимо застревания.Дайте мне знать, если кто-нибудь знает, как сделать то, что я изначально пытался сделать.Вот что я придумал:
data "aws_subnet_ids" "subnets" {
depends_on = ["aws_cloudformation_stack.subnets"]
vpc_id = "${aws_cloudformation_stack.vpc.outputs["VPCId"]}"
}
output "subnets" {
value = "${data.aws_subnet_ids.subnets.ids}"
}