Reputation: 79468
I am trying to do this basically:
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
}
I am outputting lb
from a submodule in Terraform, and trying to use that in the parent module in a for_each
array, with a custom iterator
name. It is giving me this error:
This object does not have an attribute named "arn".
But it DOES have that attribute, it's an aws_lb
. What am I doing wrong in the usage of this for_each
and module setup, and how do I fix it? Thank you very much!
If I change it to this it seems to work:
resource "aws_globalaccelerator_endpoint_group" "world" {
listener_arn = aws_globalaccelerator_listener.world.id
endpoint_configuration {
endpoint_id = module.california.lb.arn
weight = 100
}
}
Upvotes: 3
Views: 6642
Reputation: 238867
From the docs:
The iterator object (setting in the example above) has two attributes:
key is the map key or list element index for the current element. If the for_each expression produces a set value then key is identical to value and should not be used.
value is the value of the current element.
Based on that, in the content
, you should used lb.value["arn"]
, as per example. Thus, the following could be tried:
content {
endpoint_id = lb.value["arn"]
weight = 100
}
Upvotes: 4