如何用Terraform创建嵌套Azure管理组层级结构?
实现Terraform嵌套Azure管理组层级结构
1. 调整输入变量结构
首先修改模块的variables.tf,定义支持嵌套层级的变量结构,用嵌套对象列表描述管理组的层级关系:
variable "management_groups" { type = list(object({ name = string display_name = string children = optional(list(object({ name = string display_name = string children = optional(list(object({ name = string display_name = string # 按需扩展更多层级 }))) }))) })) description = "带层级关系的管理组定义,支持多层嵌套" }
2. 分层循环创建管理组
在模块的main.tf中,通过多层for_each循环分别创建顶层、一级子、二级子(及更深层级)的管理组,自动传递父级ID:
# 创建顶层管理组 resource "azurerm_management_group" "top_level" { for_each = { for mg in var.management_groups : mg.name => mg } name = each.value.name display_name = each.value.display_name } # 创建一级子管理组 resource "azurerm_management_group" "level_1" { for_each = { for top_mg in var.management_groups : for child_mg in top_mg.children : "${top_mg.name}-${child_mg.name}" => merge(child_mg, { parent_name = top_mg.name }) } name = each.value.name display_name = each.value.display_name parent_id = azurerm_management_group.top_level[each.value.parent_name].id } # 创建二级子管理组(按需扩展更多层级) resource "azurerm_management_group" "level_2" { for_each = { for top_mg in var.management_groups : for level1_mg in top_mg.children : for child_mg in level1_mg.children : "${top_mg.name}-${level1_mg.name}-${child_mg.name}" => merge(child_mg, { parent_key = "${top_mg.name}-${level1_mg.name}" }) } name = each.value.name display_name = each.value.display_name parent_id = azurerm_management_group.level_1[each.value.parent_key].id }
3. 模块调用示例
在根模块中按嵌套结构传入管理组定义,即可自动生成层级:
module "mg_hierarchy" { source = "./modules/mg" management_groups = [ { name = "App" display_name = "应用管理组" children = [ { name = "Prod" display_name = "生产环境" }, { name = "Test" display_name = "测试环境" }, { name = "Dev" display_name = "开发环境" } ] }, { name = "Platform" display_name = "平台管理组" children = [ { name = "Infra" display_name = "基础设施服务" } ] } ] }
关键说明
- 每个层级的资源通过
parent_id自动关联父管理组的ID,无需手动配置。 - 资源的
for_each键用父级名称+自身名称拼接,确保全局唯一,避免命名冲突。 - 如需支持更深层级,只需按照相同模式添加对应层级的资源块和循环逻辑即可。
内容的提问来源于stack exchange,提问作者GoneCase123
相关产品推荐
相关产品推荐

