繁体   English   中英

如何在 Terraform 的动态块中使用 for_each 和迭代器?

[英]How to use for_each with iterator in dynamic block in Terraform?

我基本上正在尝试这样做:

module "california" {
  source = "./themodule"
  # ...
}

module "oregon" {
  source = "./themodule"
  # ...
}

resource "aws_globalaccelerator_endpoint_group" "world" {
  # ...
  dynamic "endpoint_configuration" {
    for_each = [
      module.california.lb,
      module.oregon.lb
    ]
    iterator = lb
    content {
      endpoint_id = lb.arn
      weight = 100
    }
  }
}

# themodule/main.tf
resource "aws_lb" "lb" {
  # ...
}

output "lb" {
  value = aws_lb.lb
}

我正在从 Terraform 中的子模块输出lb ,并尝试在for_each数组的父模块中使用它,并使用自定义iterator名称。 它给了我这个错误:

This object does not have an attribute named "arn".

但它确实具有该属性,它是aws_lb 我在使用这个for_each和模块设置时做错了什么,我该如何解决? 非常感谢!

如果我将其更改为此它似乎可以工作:

resource "aws_globalaccelerator_endpoint_group" "world" {
  listener_arn = aws_globalaccelerator_listener.world.id

  endpoint_configuration {
    endpoint_id = module.california.lb.arn
    weight = 100
  }
}

文档

迭代器 object(在上面的例子中设置)有两个属性

key是当前元素的 map 键或列表元素索引。 如果 for_each 表达式产生一个设置值,则 key 与 value 相同,不应使用。

value是当前元素的值。

基于此,在content中,您应该使用lb.value["arn"] ,如example 因此,可以尝试以下方法:

    content {
      endpoint_id = lb.value["arn"]
      weight = 100
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM