terraform route53分解器设置
刚刚尝试使用新的terraform aws_route53_解析器_端点资源。它将子网ID作为块类型列表。不幸的是,似乎无法从从上一步的输出变量读取的子网列表中填充此内容 基本上,我在上一步中使用子网资源的计数创建了一组子网。我正在尝试使用这些并在每个子网中设置aws_route53_resolver_端点:terraform route53分解器设置,terraform,amazon-route53,terraform-provider-aws,Terraform,Amazon Route53,Terraform Provider Aws,刚刚尝试使用新的terraform aws_route53_解析器_端点资源。它将子网ID作为块类型列表。不幸的是,似乎无法从从上一步的输出变量读取的子网列表中填充此内容 基本上,我在上一步中使用子网资源的计数创建了一组子网。我正在尝试使用这些并在每个子网中设置aws_route53_resolver_端点: resource "null_resource" "management_subnet_list" { count = "${length(var.subnet_ids)}" t
resource "null_resource" "management_subnet_list" {
count = "${length(var.subnet_ids)}"
triggers {
subnet_id = "${element(data.terraform_remote_state.app_network.management_subnet_ids, count.index)}"
}
}
resource "aws_route53_resolver_endpoint" "dns_endpoint" {
name = "${var.environment_name}-${var.network_env}-dns"
direction = "OUTBOUND"
security_group_ids = ["${var.security_groups}"]
ip_address = "${null_resource.management_subnet_list.*.triggers}"
}
运行上述命令时,会导致错误:ip\u地址:应为列表
如果我修改代码如下:
ip_address = ["${null_resource.management_subnet_list.*.triggers}"]
我得到一个错误:ip\u地址:属性至少支持2个项,config声明了1个
我似乎找不出任何其他方法来从子网列表动态创建资源列表
任何帮助都将不胜感激。根据的资源参考,
ip\u地址
块中的subnet\u id
是单个字符串值
要指定多个子网,您需要有多个ip\u地址
块
由于您声明正在使用创建子网,因此可以使用索引单独引用每个子网,例如:aws\u subnet.main[0].id
,aws\u subnet.main[1].id
等等,每个子网都位于其自己的ip\u地址
块中。(或者对于Terraform0.11,我认为它是“${aws\u subnet.main.0.id}”
)
然而,更好的方法是使用Terraform 0.12中提供的+
动态块允许您在顶级块中创建可重复的嵌套块。(资源、数据、提供程序和供应器块当前支持动态块)
aws\u route53\u resolver\u端点
资源中的动态ip\u地址
块可能如下所示:
dynamic "ip_address" {
for_each = aws_subnet.main[*].id
iterator = subnet
content {
subnet_id = subnet.value
}
}
这将导致在aws\u subnet.main
资源中创建的每个子网都有一个单独的ip\u地址
嵌套块
每个参数的都是要迭代的复杂值。它接受任何集合或结构值,通常是每个所需嵌套块包含一个元素的列表或映射
有关动态嵌套块表达式的完整信息,请参阅Terraform文档,网址为:您是否希望子网列表经常更改?如果是这样的话,只是子网ID会改变,还是子网的数量也会改变?看起来就像Terraform 0.12的情况(目前处于测试阶段)。是的,子网列表可以在2或3之间变化。我正在管理按需vpc的创建,在每个vpc中,一个团队可以决定使用2个或3个AZ,因此根据2个或3个AZ中的子网,我需要创建出站解析器端点。带有for循环的terraform 0.12动态块可以工作,但是我们现在不能使用terraform 0.12。如果没有v0.12,您可以解决这个问题