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

