Azure CAF企业级模块重命名变更跟踪数据收集规则报错
Terraform Azure CAF模块重命名变更跟踪数据收集规则时出现重复Key错误
在使用Terraform结合Azure CAF企业级模块时,修改management目录下settings.management文件的advanced块重命名数据收集规则(DCR)时,仅变更跟踪(change tracking)相关配置触发报错,其余类型的DCR重命名操作均正常。注释掉change_tracking块后,Terraform可正常执行,但无法完成该DCR的重命名。
报错信息
│ Error: Duplicate object key │ │ on .terraform/modules/alz/locals.management.tf line 65, in locals: │ 63: azurerm_monitor_data_collection_rule_management = { │ 64: for resource in module.management_resources.configuration.azurerm_monitor_data_collection_rule : │ 65: resource.resource_id => resource │ 66: if resource.managed_by_module │ 67: } │ ├──────────────── │ │ resource.resource_id is "/subscriptions/**********/resourceGroups/rg-obs-plz-mgt-dev-uks/providers/Microsoft.Insights/dataCollectionRules/dcr-ct-plz-mgt-dev-uks-001" │ │ Two different items produced the key │ "/subscriptions/**************/resourceGroups/rg-obs-plz-mgt-dev-uks/providers/Microsoft.Insights/dataCollectionRules/dcr-ct-plz-mgt-dev-uks-001" │ in this 'for' expression. If duplicates are expected, use the ellipsis │ (...) after the value expression to enable grouping by key. ╵ ##[warning]Can't find loc string for key: TerraformPlanFailed ##[error]Error: TerraformPlanFailed 1
当前配置片段
azurerm_data_collection_rule = { management = { vminsights = { name = "dcr-vw-${var.zone}-${var.environment}-uks-001" }, change_tracking = { name = "dcr-ct-${var.zone}-${var.environment}-uks-001" }, defendersql = { name = "dcr-def-${var.zone}-${var.environment}-uks-001" } } }
解决方案
这个问题源于Azure CAF模块处理变更跟踪DCR时,默认会自动创建关联的辅助资源,手动重命名主DCR时,模块内部会同时生成新旧两个DCR的resource_id映射,导致for循环出现重复key。
方法一:先销毁旧DCR再重建
- 暂时注释配置中的
change_tracking块,执行terraform apply销毁旧的变更跟踪DCR。 - 若状态文件仍残留旧DCR记录,执行以下命令移除:
terraform state rm module.management_resources.azurerm_monitor_data_collection_rule.change_tracking - 取消
change_tracking块的注释,确保新名称配置正确,再次执行terraform apply创建新命名的DCR。
方法二:使用override参数强制覆盖
在change_tracking配置块中添加override = true,强制模块使用自定义配置,避免自动生成重复资源:
azurerm_data_collection_rule = { management = { change_tracking = { name = "dcr-ct-${var.zone}-${var.environment}-uks-001" override = true } } }
注意:操作前务必备份Terraform状态文件,防止资源误操作。
内容的提问来源于stack exchange,提问作者Paul Robert
相关产品推荐
相关产品推荐

