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
相关产品推荐
相关产品推荐

