Terraform for_each用例 [英] Terraform for_each use case

查看:116
本文介绍了Terraform for_each用例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在每个区域中创建一堆Route 53解析程序规则,这对于for_each循环非常有用:

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)))
}

我的var看起来像这样:

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
}

问题:如何修改(枚举)资源关联部分,以便为我定义的每个规则创建每个关联(必须为1到1关联).我只是不能把头缠起来:)

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 :)

推荐答案

您的 aws_route53_resolver_rule.resolver-rule 将是具有 resolver-rule1键的映射 resolver-rule2 .

因此要在您的规则关联中访问其 arn ,您可以执行以下操作:

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
}

在您的问题中,未显示 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.

这篇关于Terraform for_each用例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆