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

使用Terraform在Azure创建多台VM并分配角色的for_each循环问题

解决方案

直接使用和创建虚拟机相同的for_each逻辑遍历CSV原始条目,通过CSV中每行一一对应的names和email字段同时关联虚拟机资源和Azure AD用户即可,修改后的角色分配代码如下:

data "azuread_user" "user" {
    for_each = {for r in local.group_names : r.email => r}
    user_principal_name = each.value.email
}

resource "azurerm_role_assignment" "new_terraform_vm_rbac" {
  # 复用和VM创建一致的遍历逻辑,每行CSV对应一个角色分配
  for_each = {for r in local.group_names : r.names => r}

  scope                = azurerm_windows_virtual_machine.new_terraform_vm[each.key].id
  role_definition_name = "Reader"
  # 通过当前行的email字段关联到对应的Azure AD用户对象ID
  principal_id         = data.azuread_user.user[each.value.email].object_id
}

优化说明

  • 没有手动拼接虚拟机资源ID,而是直接引用已经创建的azurerm_windows_virtual_machine资源的id属性,避免手动拼写错误
  • 利用CSV单条数据中names和email的对应关系,同时获取到虚拟机索引和用户邮箱,解决两类数据源的关联问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:45:00