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

Terraform按Map元素创建azuread_application_password资源遇问题

问题解决方案

你当前的代码无法运行,核心原因是var.users的each.value是列表类型,而azuread_application.auth需要单个应用名称作为索引键,无法直接用列表匹配。要实现为每个用户的每个关联应用生成密钥,需要先将用户-应用的一对多关系拆解为扁平的一对一条目。

步骤1:创建扁平的用户-应用映射

在locals块中,将原有的嵌套结构转换为每个用户-应用组合对应的唯一条目:

locals {
  user_app_pairs = {
    for username, apps in var.users :
    for app_name in apps : "${username}-${app_name}" => {
      user = username
      app  = app_name
    }
  }
}

这个转换会生成一个新的Map,键为用户名-应用名的唯一标识,值包含对应的用户名和应用名,确保每个条目唯一。

步骤2:修改资源块遍历扁平映射

更新azuread_application_password资源的for_each参数,使用上述本地变量,并正确引用应用ID:

resource "azuread_application_password" "client_secret" {
  for_each              = local.user_app_pairs
  display_name          = "Secret-${each.value.user}"
  application_object_id = azuread_application.auth[each.value.app].object_id
}

这样配置后,Terraform会为每个用户的每个关联应用单独创建密钥资源,显示名称包含对应用户名,且正确关联到目标应用的object_id。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:15:37