首页 > 解决方案 > Terraform 空和非空块地图变量

问题描述

我想使用 Terraform 制作后端服务。我使用资源类型google_compute_backend_service

现在,我有 2 个由gcloud命令创建的后端服务。一个正在使用cdn_policy ,另一个不使用cdn_policy.

第一个 backend-services tfstate 就像

...
"cdn_policy": [
  {
    "cache_key_policy": [],
    "signed_url_cache_max_age_sec": 3600
  }
]
...

第二个后端服务就像

"cdn_policy": []

如何创建适用于它们的 terraform 脚本?因此,terraform 脚本可以为cdn_policy包含其块图的后端服务运行,也可以为没有cdn_policy.

在我的想法中,我可以创建 2 个 terraform 脚本。第一个用于 cdn_policy,第二个没有 cdn_policy。但是,我认为这不是最佳做法。

如果我放cdn_policy = [],会导致错误An argument named "cdn_policy" is not expected here

标签: terraformterraform-provider-gcp

解决方案


您可以使用动态块根据输入变量中的对象列表创建一组块:动态块

resource "google_compute_backend_service" "service" {

  ...

  dynamic "cdn_policy" {
    for_each = var.cdn_policy

    content {
      cache_key_policy             = cdn_policy.value.cache_key_policy
      signed_url_cache_max_age_sec = cdn_policy.value.signed_url_cache_max_age_sec
    }
  }
}

推荐阅读