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

