terraform route53分解器设置

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

刚刚尝试使用新的terraform aws_route53_解析器_端点资源。它将子网ID作为块类型列表。不幸的是,似乎无法从从上一步的输出变量读取的子网列表中填充此内容

基本上,我在上一步中使用子网资源的计数创建了一组子网。我正在尝试使用这些并在每个子网中设置aws_route53_resolver_端点:

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,您可以解决这个问题