Azure 如何防止在运行terraform destroy时删除资源组?

Azure 如何防止在运行terraform destroy时删除资源组?,azure,terraform,Azure,Terraform,我已经创建了资源组,而不是使用我的代码创建的 我运行terraform apply,并创建了infra。但是当我运行terraform destroy时,控制台说我的资源组也应该被删除。这不应该发生,因为不仅我的infra在这个资源组中 我已经尝试使用terraform导入,正如这里所描述的,并且得到了与之前相同的结果 此外,我还尝试仅使用名称来定义资源组,但它不起作用。Terraform destroy将删除此资源 resource "azurerm_resource_group" "test

我已经创建了资源组,而不是使用我的代码创建的

我运行terraform apply,并创建了infra。但是当我运行terraform destroy时,控制台说我的资源组也应该被删除。这不应该发生,因为不仅我的infra在这个资源组中

我已经尝试使用terraform导入,正如这里所描述的,并且得到了与之前相同的结果

此外,我还尝试仅使用名称来定义资源组,但它不起作用。Terraform destroy将删除此资源

resource "azurerm_resource_group" "testgroup" {    
name = "Test-Group"    
}

您必须在配置中不包括资源组资源,才能不销毁资源组,因为配置中的所有资源都要销毁。如果依赖于该资源的输出,则可以使用数据资源

data "azurerm_resource_group" "test" {
  name = "Test-Group"
}

OP还需要从状态文件中删除资源组。

您不必在配置中包含资源组资源,这样资源组就不会被销毁,因为配置中的所有资源都会被销毁。如果依赖于该资源的输出,则可以使用数据资源

data "azurerm_resource_group" "test" {
  name = "Test-Group"
}

OP还需要从状态文件中删除资源组。

此bash脚本可以工作:

terraform state list | while read line
do 
if [[ $line == azurerm_resource_group* ]]; then
echo $line " is a resource group and will not be deleted!"
else
echo "deleting: " $line
terraform destroy -target $line -auto-approve
fi
done

它列出了terraform管理的所有资源,然后为每个条目运行删除脚本,但包含azurerm_resource_group*的行除外。此bash脚本可以工作:

terraform state list | while read line
do 
if [[ $line == azurerm_resource_group* ]]; then
echo $line " is a resource group and will not be deleted!"
else
echo "deleting: " $line
terraform destroy -target $line -auto-approve
fi
done

它列出了terraform管理的所有资源,然后为每个条目运行删除脚本,但包含azurerm_resource_group*的行除外。

这个答案将通过一个简单的工作示例得到改进,说明如何实现这一点,而不是导入资源。我想这就是我需要的?刚检查过,但不起作用。我认为这是因为我以前使用以前的代码进行部署,而现在我按照您编写的那样做了什么不起作用?如果用此替换资源,则还需要替换对资源的引用。没错,我需要对状态文件执行一些操作。我只使用以下命令从状态文件中删除资源组:terraform state rm testgroup,然后在列表中看不到要删除的资源组。非常感谢你!这个答案可以通过一个简单的工作示例来改进,说明他们如何实现这一点,而不是导入资源?刚检查过,但不起作用。我认为这是因为我以前使用以前的代码进行部署,而现在我按照您编写的那样做了什么不起作用?如果用此替换资源,则还需要替换对资源的引用。没错,我需要对状态文件执行一些操作。我只使用以下命令从状态文件中删除资源组:terraform state rm testgroup,然后在列表中看不到要删除的资源组。非常感谢你!