【问题标题】:How to create a map in terraform如何在 terraform 中创建地图
【发布时间】:2020-10-16 03:49:44
【问题描述】:

我对如何让这个工作感到困惑,我有一个子域 (module.foo.dev) 和备用域名为 *.foo.dev 但它必须使用与我的 root_domain 相同的 zone_id。

我正在尝试使用类似的本地地图

all_domains = {
  ["module.foo.dev","*.foo.dev"] = "foo.dev"
  ["bar.com"] = "bar.com"
}

我的变量如下 primary_domain = "module.foo.dev" sub_alternate_domain = ["*.foo.dev","bar.com"]

最终会在下面的模块中使用该 locals 值 模块:

resource "aws_route53_record" "record" {

  count      = var.validation_method == "DNS" ? local.all_domains : 0
  name       = aws_acm_certificate.certificate.domain_validation_options.0.resource_record_name
  type       = aws_acm_certificate.certificate.domain_validation_options.0.resource_record_type
  zone_id    = data.aws_route53_zone.selected[count.index].zone_id
  ttl        = "300"
  records    = [aws_acm_certificate.certificate.domain_validation_options.0.resource_record_value]

}

有人可以帮我解决这个问题吗..

【问题讨论】:

  • 您可以在此处的文档中找到映射类型初始化的语法:terraform.io/docs/configuration/functions/map.html
  • @MattSchuchard 地图功能已被弃用。
  • @AlainO'Dea 该链接既有旧的函数,也有地图的当前初始化语法。
  • @MattSchuchard 没有争论,只是澄清读者不应将其视为使用 map 功能的邀请。有趣的是,TF12 map 语法示例比表达式语言文档中的更好。奇怪的世界。

标签: terraform amazon-route53 terraform-provider-aws


【解决方案1】:

在 Terraform 中,地图只能将字符串作为键(未加引号的键仍然是字符串),因此您需要交换键和值:

locals{
  all_domains = {
    "foo.dev" = ["module.foo.dev","*.foo.dev"]
    "bar.com" = ["bar.com"]
  }
}

此外,如上所述,您的局部变量需要在 locals 块中声明和分配。

资源的 count 参数需要一个完整的非负数(0 或更大),并且不会接受映射作为值。你需要使用 for_each 代替:

resource "aws_route53_record" "record" {

  for_each      = var.validation_method == "DNS" ? local.all_domains : {}
  name       = aws_acm_certificate.certificate.domain_validation_options.0.resource_record_name
  type       = aws_acm_certificate.certificate.domain_validation_options.0.resource_record_type
  zone_id    = data.aws_route53_zone.selected[count.index].zone_id
  ttl        = "300"
  records    = [aws_acm_certificate.certificate.domain_validation_options.0.resource_record_value]

}

map type in the Expression Language doc 提供了一些最低限度的额外指导。

【讨论】:

  • @user6826691 您的问题是“如何在 terraform 中创建地图”。我在回答这个问题时有什么遗漏吗?您现在似乎在问一个单独的问题,您应该将此标记为正确,然后单独提出后续问题。
猜你喜欢
  • 2020-09-08
  • 1970-01-01
  • 2019-07-23
  • 2020-10-17
  • 1970-01-01
  • 2019-11-09
  • 2019-07-26
  • 1970-01-01
  • 2021-01-23
相关资源
最近更新 更多