You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform中处理可选null嵌套for_each的扁平化结构构建问题

解决Terraform中容器映射为null时的扁平化问题

问题分析

你的变量定义允许containers为null,但原有的扁平化代码直接遍历st.containers,当某个存储账户的containers为null时,会触发遍历空值的错误,导致代码无法正常执行。

解决方案

通过coalesce函数将null的containers转换为空映射({}),这样遍历操作就能正常处理所有存储账户,无论其是否定义了容器:

locals {
  containers = flatten([
    for storage_key, st in var.Storage : [
      # 用coalesce把null转为空map,避免遍历空值报错
      for cont_key, cont in coalesce(st.containers, {}) : {
        storage_key  = storage_key,
        storage_name = st.name,
        cont_name    = cont_key,
        access_type  = cont.container_access_type
      }
    ]
  ])
}

说明

  • coalesce(st.containers, {})会判断st.containers的值:如果是null,就返回空映射{};如果已有容器定义,就使用原有的容器映射。
  • 这样修改后,即使某个存储账户没有配置containers(即值为null),代码也不会报错,只会跳过该账户的容器遍历,最终生成的local.containers列表仅包含有容器定义的条目。
  • 后续你可以基于这个扁平化后的列表,使用Terraform资源块为对应的存储账户创建容器,示例如下:
resource "azurerm_storage_container" "example" {
  for_each = {
    for c in local.containers : "${c.storage_name}-${c.cont_name}" => c
  }

  name                  = each.value.cont_name
  storage_account_name  = each.value.storage_name
  container_access_type = each.value.access_type
}

这个资源块通过for_each遍历扁平化后的容器列表,为每个条目创建对应的存储容器,确保只在指定的存储账户下创建配置好的容器。

内容的提问来源于stack exchange,提问作者Wolfgang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 21:12:36