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

Terraform多层嵌套count实现Azure RBAC资源级角色分配报错处理

问题修复方案

1 修复角色分配scope字段报错

报错的核心原因是:你通过count声明了data.azurerm_resources.role_scope_resource,所以它本身是长度等于length(var.resource_roles)的实例列表,访问属性前必须先指定对应索引的实例,再取该实例下resources列表的第0项ID。
直接替换azurerm_role_assignment的scope字段即可:

scope = data.azurerm_resources.role_scope_resource[count.index].resources[0].id

另外需要同步修正principal_id字段的错误写法:每个模块实例对应一个AAD组,该组的所有角色分配共用同一个principal_id,不需要按count.index取。首先确认aad-group-generic-roles模块内的AAD组查询逻辑正确:

data "azuread_group" "security_group" {
  display_name = var.group_display_name
}

然后将principal_id修改为:

principal_id = data.azuread_group.security_group.id

2 修复output报错

报错原因是你调用模块时使用了for_each,所以module.aad_permissions_assignments_generic是一个以组名为key的map结构,不能直接访问.test属性,需要遍历获取所有实例的输出。
保留aad-group-generic-roles内的test输出不变,修改aad_permissions_assignments文件夹下的output配置:

# 输出为列表格式
output "testparent" {
  value = [for group in module.aad_permissions_assignments_generic : group.test]
}

# 若需要按组名分组输出可以用以下写法
# output "testparent" {
#   value = { for k, group in module.aad_permissions_assignments_generic : k => group.test }
# }

额外优化建议

可以在取resources[0]前增加校验逻辑,避免查询不到资源时直接报错:

scope = length(data.azurerm_resources.role_scope_resource[count.index].resources) > 0 ? data.azurerm_resources.role_scope_resource[count.index].resources[0].id : null

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:27:02