Terraform中AzureRM的prevent_deletion_if_contains_resources功能失效排查
针对你遇到的prevent_deletion_if_contains_resources配置未生效的问题,核心原因通常是对参数的作用范围、生效条件理解有误,或者配置位置错误,具体排查点如下:
配置位置错误
这个参数是AzureRM Provider级别的全局配置,必须写在provider "azurerm"块内,而非azurerm_resource_group资源块中。正确配置示例:provider "azurerm" { features { resource_group { prevent_deletion_if_contains_resources = true } } }如果把参数放在资源组定义里,完全不会生效。
对参数作用范围的误解
该参数仅限制通过Terraform发起的资源组删除操作,对Azure门户、Azure CLI等原生工具的删除操作无任何约束。所以你能从门户直接删除资源组是正常行为,并非配置失效。Provider版本不兼容
prevent_deletion_if_contains_resources是在AzureRM Provider v2.70.0版本才引入的特性,如果你使用的版本低于这个号,配置会被忽略。可以通过terraform providers命令查看当前使用的版本,若版本过低,需在required_providers中指定符合要求的版本:terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = ">= 2.70.0" } } }验证方式有误
当参数设为true时,执行terraform destroy应该返回类似Cannot delete resource group 'rg1' because it contains resources. To delete the resource group, first delete all resources in the resource group.的错误。如果没触发错误,要检查:- Terraform执行日志中是否加载了该配置
- 资源组内的存储账户是否确实存在(有没有被提前手动删除)
内容的提问来源于stack exchange,提问作者Frédéric De Lène Mirouze

