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

Terraform遍历AzureAD组成员获取用户邮箱的实现疑问

解决方案

你需要先把所有AzureAD组的成员整合为一个唯一的用户ID集合(避免重复获取同一用户),再通过该集合遍历获取用户邮箱,最后关联回对应项目。

1. 整合所有组的成员ID并去重

在现有locals块中添加以下代码,将所有项目组的成员ID扁平化后转为集合(自动去重):

locals {
  # 保留你已有的projects和projects__map定义

  # 整合所有AzureAD组的成员ID,去重后得到唯一用户ID集合
  all_project_member_ids = toset(flatten([
    for group in data.azuread_group.project_group : group.members
  ]))
}

2. 获取所有成员的用户信息

使用上述用户ID集合作为for_each参数,批量获取AzureAD用户的完整数据(包含邮箱):

data "azuread_user" "project_users" {
  for_each = local.all_project_member_ids
  object_id = each.key
}

3. 关联项目与成员邮箱

创建本地映射,将每个项目直接关联到其对应的成员邮箱列表:

locals {
  # 每个项目对应的成员邮箱列表
  project_member_emails = {
    for proj in local.projects : proj.resource => [
      for member_id in data.azuread_group.project_group[proj.resource].members :
      data.azuread_user.project_users[member_id].mail
    ]
  }
}

使用方式

现在你可以通过local.project_member_emails["project1"]直接获取project1对应的所有成员邮箱地址。

关键说明

  • 用flatten将多个组的成员列表合并为一维列表,再通过toset自动去重,避免重复调用azuread_user数据源获取同一用户,提升效率。
  • Terraform不支持data.azuread_group.project_group[?].members这类模糊索引语法,必须通过for表达式明确遍历所有组来收集成员ID。

内容的提问来源于stack exchange,提问作者Ľuboš Olejár

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:42:45