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

如何用Terraform循环处理映射列表并创建MongoDB Atlas项目资源

解决方案

1. 优化YAML结构

原YAML结构采用列表嵌套单键对象的形式,不利于Terraform迭代处理。调整为层级清晰的结构,每个项目包含明确的name和teams字段:

---
projects:
  - name: Terraform-Project-1
    teams:
      - name: example-team-1
        roles:
          - GROUP_READ_ONLY
          - GROUP_DATA_ACCESS_READ_WRITE
      - name: example-team-2
        roles:
          - GROUP_READ_ONLY
          - GROUP_DATA_ACCESS_READ_WRITE
  - name: Terraform-Project-2
    teams:
      - name: example-team-3
        roles:
          - GROUP_READ_ONLY
          - GROUP_DATA_ACCESS_READ_WRITE
      - name: example-team-4
        roles:
          - GROUP_READ_ONLY
          - GROUP_DATA_ACCESS_READ_WRITE

2. 解码YAML并提取数据

使用yaml_json_multidecoder模块解码后,通过本地变量提取项目列表和唯一团队名称:

module "yaml_json_multidecoder" {
  source  = "levmel/yaml_json/multidecoder"
  version = "0.2.1"
  filepaths = ["./projects.yaml"]
}

locals {
  projects = module.yaml_json_multidecoder.files.projects.projects
  # 提取所有唯一团队名称,避免重复查询
  unique_team_names = distinct(flatten([for p in local.projects : [for t in p.teams : t.name]]))
}

3. 动态获取团队ID

利用mongodbatlas_team数据源,根据团队名称批量查询ID:

data "mongodbatlas_team" "teams" {
  for_each = toset(local.unique_team_names)
  org_id   = "<ORG_ID>" # 替换为你的组织ID
  name     = each.key
}

4. 动态创建MongoDB Atlas项目及团队关联

使用for_each批量创建项目资源,结合dynamic块自动生成teams关联:

resource "mongodbatlas_project" "test" {
  for_each          = { for p in local.projects : p.name => p }
  name              = each.value.name
  org_id            = "<ORG_ID>" # 替换为你的组织ID
  project_owner_id  = "<OWNER_ACCOUNT_ID>" # 替换为项目所有者ID

  dynamic "teams" {
    for_each = each.value.teams
    content {
      team_id    = data.mongodbatlas_team.teams[teams.value.name].id
      role_names = teams.value.roles
    }
  }
}

关键说明

  • 优化后的YAML结构确保每个项目数据格式一致,便于Terraform遍历处理。
  • distinct函数避免重复查询同一团队的ID,提升执行效率。
  • for_each实现多项目批量创建,dynamic块自动完成每个项目下的多团队权限配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:20:33