Терраформирование для каждого варианта использования

#amazon-web-services #terraform #amazon-route53

#amazon-веб-службы #terraform #amazon-route53

Вопрос:

Я создаю кучу правил распознавания маршрутов 53 в каждом регионе, и это отлично работает с циклом for_each:

 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 выглядит следующим образом:

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

Теперь мне нужно связать эти правила с общим ресурсом (не публикуя здесь):

 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). Я просто не могу обмозговать это 🙂

Ответ №1:

У вас aws_route53_resolver_rule.resolver-rule будет карта с ключами от resolver-rule1 и resolver-rule2 .

Поэтому, чтобы получить доступ к нему arn в вашем rule-association , вы могли бы сделать следующее:

 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 не показано, поэтому я не знаю, требуются ли вам какие-либо изменения в нем или нет.