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

如何用单个Terraform资源块批量创建多个实例关联的Okta用户组

实现方案

核心思路是先将local.instances中嵌套的groups数组展开为每个用户组对应一条独立记录的扁平映射,再通过单个资源块的for_each遍历即可,不需要拆分多个资源块。

第一步:构造扁平的组映射

在locals块中新增处理后的组结构,用flatten展开嵌套层级:

locals {
  instances = [
    {
      instance  = "test1"
      baseUrl   = "url"
      subDomain = "sd"
      groups = [
        "app1",
        "app2",
        "app3",
      ]
    },
    {
      instance  = "test2"
      baseUrl   = "url2"
      subDomain = "sd2"
      groups = [
        "t1",
        "t2",
        "t3",
      ]
    },
  ]

  # 展开嵌套结构,每个组对应一条独立记录
  all_groups = flatten([
    for instance in local.instances : [
      for group_name in instance.groups : {
        instance_name = instance.instance
        group_name    = group_name
        base_url      = instance.baseUrl
        sub_domain    = instance.subDomain
        # 构造唯一键,避免不同实例下同名组冲突
        unique_key = "${instance.instance}-${group_name}"
      }
    ]
  ])
  # 转换为for_each需要的映射结构
  group_map = { for item in local.all_groups : item.unique_key => item }
}

第二步:单个资源块遍历创建所有组

resource "okta_group" "all_press" {
  for_each = local.group_map
  name     = each.value.group_name
  # 后续如果需要关联实例参数,可直接取each.value.base_url、each.value.sub_domain等属性
}

补充说明

  • 构造unique_key作为映射的键是为了保证每个组的索引唯一,避免不同实例下存在同名组时出现资源ID冲突
  • 所有实例下的组都会通过okta_group.all_press这一个资源块创建,后续新增实例或组只需要修改local.instances即可,不需要新增资源块
  • 访问创建后的资源时可以用okta_group.all_press["test1-app1"]的格式定位到具体实例下的具体组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:57:01