【发布时间】:2017-06-05 16:09:00
【问题描述】:
我正在尝试使用 count 在 terraform 中动态创建一些 aws 资源,然后构建一个包含所有已创建资源 ID 列表的输出变量
resource "aws_subnet" "subnet-1" {
// If subnet_id value is supplied then we set count to 1 to create otherwise skip
count = "${replace(replace(var.primary_subnet_cidr, "/^.+/", "1"), "/^$/", "0")}"
tags = {
Name = "subnet-1"
}
cidr_block = "${var.primary_subnet_cidr}"
vpc_id = "${var.vpc_id}"
availability_zone = "${var.aws_region}a"
}
resource "aws_subnet" "subnet-2" {
// If subnet_id value is supplied then we set count to 1 to create otherwise skip
count = "${replace(replace(var.secondary_subnet_cidr, "/^.+/", "1"),"/^$/", "0")}"
tags = {
Name = "subnet-2"
}
cidr_block = "${var.secondary_subnet_cidr}"
vpc_id = "${var.vpc_id}"
availability_zone = "${var.aws_region}b"
}
output "ids" {
value = ["${aws_subnet.subnet-1.id}","${aws_subnet.subnet-2.id}"]
}
这个想法是通过提供其变量(primary_subnet_cidr 或 secondary_subnet_cidr)来仅创建您想要的子网。
动态创建它们可以正常工作,但我的问题是动态列表。
当尝试在类似 aws_db_subnet_group.subnet_ids 的列表中使用此列表时,它仅在两个子网都已创建时才有效,否则会引发以下错误
InvalidSubnet: Subnet IDs are required.
我也试过了
output "ids" {
value = ["${aws_subnet.*.id}"]
}
但 terraform 似乎不支持资源级别的通配符。
我怀疑这与我生成输出列表的方式有关。有没有更好的方法来生成该动态列表,使其仅包含创建的资源?
【问题讨论】:
标签: amazon-web-services terraform