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

Terraform如何遍历嵌套数组的对象数组创建PostgreSQL扩展

Terraform多层嵌套结构批量创建PostgreSQL扩展实现方法

首先第一步,先定义本地变量把嵌套的「数据库-扩展」二维结构展平为一维的扩展集合:

locals {
  # 展平数据库和扩展的嵌套关系,每个扩展对应一条独立记录
  db_extensions = flatten([
    for db in var.databases : [
      for ext in db.extensions : {
        db_name   = db.db_name
        extension = ext
      }
    ]
  ])
}

然后第二步,基于展平后的集合使用for_each批量创建postgresql_extension资源:

resource "postgresql_extension" "db_ext" {
  # 用「数据库名:扩展名」作为唯一键,保证每个库的每个扩展对应唯一资源实例
  for_each = { for item in local.db_extensions : "${item.db_name}:${item.extension}" => item }

  name     = each.value.extension
  database = each.value.db_name
  # 确保对应数据库创建完成后再安装扩展
  depends_on = [postgresql_database.db]
}

实现逻辑说明

  • 原始输入是两层嵌套结构:外层是数据库数组,每个数据库对象内嵌套扩展数组,而Terraform的for_each仅支持一维的map/set作为遍历源,因此核心步骤是先通过flatten+双层for表达式把嵌套结构拍平,得到所有「数据库+扩展」的独立组合
  • 用${item.db_name}:${item.extension}作为for_each的唯一键,既保证了资源实例的唯一性,后续调整数据库或扩展配置时,Terraform也能精准识别变更,不会误删其他资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:06:03