簡體   English   中英

locals下terraform多個aws route53別名記錄

[英]terraform multiple aws route53 alias records under locals

我在 terraform locals下有一組 AliasRecords,想在 terraform 的resource "aws_route53_record"下對它們進行 map。 以下是當地人的價值:

locals {
    AWSAliasRecordSets = [
              {
                  Name =  "api-dev.example.com.",
                  Type =  "A",
                  AliasTarget =  {
                      HostedZoneId =  "EXAMPLE",
                      DNSName =  "kjhskdjhf.cloudfront.net.",
                      EvaluateTargetHealth =  false
                  }
              },
              {
                  Name =  "api.example.com.",
                  Type =  "A",
                  AliasTarget =  {
                      HostedZoneId =  "EXAMPLE",
                      DNSName =  "jsdhgfjkdshf.cloudfront.net.",
                      EvaluateTargetHealth =  false
                  }
              }
    ]
}

我正在做的是:

locals {
    FlatAWSAliasRecordSets = merge([
    for idx, AWSAliasRecordSet in local.AWSAliasRecordSets:
      {
        for AliasTarget in AWSAliasRecordSet.AliasTarget:
            "${idx}-${AliasTarget}" => {
              HostedZoneId          =  AliasTarget["HostedZoneId"]
              DNSName               =  AliasTarget["DNSName"]
              EvaluateTargetHealth  =  AliasTarget["EvaluateTargetHealth"]
          }
      }
    ]...)
}

resource "aws_route53_record" "alias_records" {
  for_each = local.FlatAWSAliasRecordSets
  zone_id  = each.value["HostedZoneId"]
  name     = each.value["AliasTarget"].Name
  type     = each.value["AliasTarget"].Type

  alias {
    zone_id                = each.value["HostedZoneId"]
    name                   = each.value["AliasTarget"].Name
    evaluate_target_health = each.value["EvaluateTargetHealth"]
  }
}

並且在推送到 AWS 時(適用 terraform),它失敗並出現以下錯誤:

│   on main.tf line 508, in locals:
│  508:               EvaluateTargetHealth  =  AliasTarget["EvaluateTargetHealth"] 

│ This value does not have any indices.

您的AWSAliasRecordSets不需要展平,因為它已經展平了。 因此,您可以 go 對其使用常規count

resource "aws_route53_record" "alias_records" {
  count    = length(local.AWSAliasRecordSets)
  zone_id  = local.AWSAliasRecordSets[count.index]["AliasTarget"].HostedZoneId
  name     = local.AWSAliasRecordSets[count.index].Name
  type     = local.AWSAliasRecordSets[count.index].Type

  alias {
    zone_id                = local.AWSAliasRecordSets[count.index]["AliasTarget"].HostedZoneId
    name                   = local.AWSAliasRecordSets[count.index].DNSName
    evaluate_target_health = each.value["AliasTarget"].EvaluateTargetHealth
  }
}

您還必須仔細檢查您對NameDNSName的使用。 您當前的用法對我來說似乎不正確,但如果確實如此,這將是一個新問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM