努力想要理解这一点,下面是我的真实世界的例子,但我想一般的问题是:
如何在模板中创建一组对象,并根据名称标签之类的内容引用ID作为特定对象,以便在另一个资源中使用?
现实世界的例子:
所以我基于作为列表变量提供的子网名称列表动态创建一堆子网
variable "subnet_names" {
description = "subnet list"
default = ["subnet1","subnet2","dmz-a","dmz-b"]
}
resource "aws_subnet" "subnets" {
count = "${length(var.subnet_names)}"
vpc_id = "${aws_vpc.vpc.id}"
cidr_block = "${cidrsubnet(var.vpc_cidr, 6, count.index)}"
map_public_ip_on_launch = "false"
availability_zone ="${element(slice(data.aws_availability_zones.available.names, 0, 2), count.index)} "
tags = "${merge(var.common_tags, map("Name", "${var.domain_short_name}-${var.subnet_names[count.index]}"))}"
}
这工作正常,但我想说,只将NAT网关连接到某些子网,例如让我们说dmz,但我无法弄清楚如何为上面创建的特定子网引用subnet_id ...我认为必须有一个 Build 新子网 Map {subnet_ID:tags.name}的方法,并通过查找tags.name选择一个,这将是corp-dmz-a作为示例
resource "aws_nat_gateway" "nat" {
allocation_id = "${aws_eip.nat_gw.id}"
subnet_id = ???????????????????????????
tags = "${merge(var.common_tags, map("Name", "${var.vpc_name_prefix}${var.domain_short_name}${var.region_short_name}-NAT" ))}"
depends_on = ["aws_internet_gateway.igw","aws_subnet.subnets"]
}
关于如何处理这个问题的任何建议都会受到赞赏,我一直在试验几种不同的方法,但我认为我缺少一些基本的理解,也许甚至有更简单的插值和其他功能,我错过了
1 回答
管理提出似乎有效的解决方案,似乎也是一个非常方便的技术分享,所以我自己在这里回答