Terraform for_each use case

梦想的初衷 提交于 2021-01-28 05:44:02

问题


I am creating a bunch of Route 53 resolver rules in each region and this works great with for_each loop:

resource "aws_route53_resolver_rule" "resolver-rule" {
  for_each = var.resolver-rules
  domain_name          = each.value.domain-name
  name                 = format("core-%s", each.value.domain-label)
  rule_type            = "FORWARD"
  resolver_endpoint_id = aws_route53_resolver_endpoint.outbound-endpoint.id
  target_ip {
    ip = each.value.forwarder1
  }
  target_ip {
    ip = each.value.forwarder2
  }

  tags     = merge(var.tags, map("Name", format("core-%s-%s-%s", var.team_name, var.environment, each.value.domain-label)))
}

My var looks like this:

variable "resolver-rules" {
  description = "A map of parameters needed for each resolver rule"
  type = map(object({
    domain-name   = string
    domain-label  = string   
    forwarder1    = string
    forwarder2    = string
  }))
}

resolver-rules = {
    "resolver-rule1" = {
        domain-name     = "10.in-addr.arpa."
        domain-label    = "10-in-addr-arpa"
        forwarder1      = "10.10.1.100"
        forwarder2      = "10.10.2.100"
    }
    "resolver-rule2" = {
        domain-name     = "mycompany.com."
        domain-label    = "mycompany-com"
        forwarder1      = "10.10.1.100"
        forwarder2      = "10.10.2.100"
    }
}

Now I need to associate those rules with resource share (not posting here):

resource "aws_ram_resource_association" "rule-association" {
  for_each           = var.resolver-rules
  resource_arn       = aws_route53_resolver_rule.resolver-rule.arn
  resource_share_arn = aws_ram_resource_share.rte53-resolver-share.arn
}

Question: how do I modify (enumerate) my resource association part, so that each association would be created for each rule I define (it has to be 1 to 1 association). I just can't wrap my head around it :)


回答1:


Your aws_route53_resolver_rule.resolver-rule will be a map with keys of resolver-rule1 and resolver-rule2.

Therefore to access its arn in your rule-association you could do the following:

resource "aws_ram_resource_association" "rule-association" {
  for_each           = var.resolver-rules
  resource_arn       = aws_route53_resolver_rule.resolver-rule[each.key].arn
  resource_share_arn = aws_ram_resource_share.rte53-resolver-share.arn
}

In your question, aws_ram_resource_share.rte53-resolver-share.arn is not shown, thus I don't know if you also require some changes to it or not.



来源:https://stackoverflow.com/questions/63662280/terraform-for-each-use-case

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!