Terraform-删除除一个资源以外的所有资源



我有一个Terraform 0.11项目,具有30-40个不同的资源。我想删除除几个以外的所有这些 - 少数在逻辑上相关。

我正在寻找靠近terraform destroy --except=resource-id的东西,但这当然不存在。

有没有办法在没有太多脚本的情况下实现这一目标(Terraform Admins有各种各样的OSS)?使用模块是否会使该过程更容易?

当前terraform destroy命令中没有--except功能。如果您真的想这样做,并且知道自己在做什么,这就是解决方法。

# list all resources
terraform state list
# remove that resource you don't want to destroy
# you can add more to be excluded if required
terraform state rm <resource_to_be_deleted> 
# destroy the whole stack except above excluded resource(s)
terraform destroy 

那么为什么这些命令适合您的想法?

Terraform使用状态(*.tfstate)将现实世界资源映射到您的配置,跟踪元数据。

terraform state rm仅从状态文件(*.tfstate)清洁记录(资源)。它不会破坏真正的资源。

由于您不运行terraform applyterraform refresh,在terraform state rm之后,Terraform根本不知道排除的资源是完全创建的。

运行terraform destroy时,它没有关于该资源状态的细节,并且不会销毁它。它将摧毁其余的。

顺便说一句,以后您仍然有机会使用terraform import命令将资源导入。

针对每个资源(在跳过数据资源时),除了您想要的一个资源可能是ATM的唯一方法:

#! /bin/bash
while read -r resource; do
    terraform destroy -target="$resource"
done < <(terraform state list | grep -vE "^data." | grep -vE "dont_remove|also_important")

要删除除某些资源以外的所有堆栈,您需要:

  1. 创建您当前状态的备份:terraform state pull > bkup.json
  2. 列出您的所有资源:terraform state list
  3. 'rm&quot您要保留的资源: terraform state rm "aws_myresource"。它不会删除云中的资源,而只能从Terraform的角度删除。
  4. 销毁您的堆栈:除了您的" rm quot"之外,它将从云中删除所有资源。就在。terraform destroy
  5. 您现在有一个空状态(0资源)。保存它以便能够编辑:terraform state pull > state-to-edit.json
  6. 通过在.resources[]块中的bkup.json添加资源对象{}来编辑state-to-edit.json。您还需要增加1个.serial
  7. 推动修改状态:terraform state push ./state-to-edit.json
  8. 您可以使用terraform planterraform state list验证您仍然拥有所需的资源&amp;删除了所有其他。

我周围有一些不同的工作。我不想用" Terraform Destroy"删除的资源我使用带有CLI的供应商创建为" Null_Resource"。您仍然可以在Terraform中使用变量。

例如(创建一个资源组,但由于null_resource而持久)

resource "null_resource" "backend-config" {
        provisioner "local-exec" {
        command     = <<EOT
    az group create --location ${var.Location} --name ${var.Resource_group_name} --tags 'LineOfBusiness=${var.Lob}' 'Region=${var.Region}' 'Purpose="Terraform-Primary-Resource-Group-${var.Lob}'
    EOT
        interpreter = ["Powershell", "-Command"]
      }
    }

现在,如果您使用Terraform销毁销毁资源。任何null_resource都将保持完整。

宝马的答案是最好的,如果您只需要销毁东西,而不要更改代码。也就是说,如果您打算在以后的某个时间恢复这些资源。

如果您只想删除资源,则适当的解决方案是删除要销毁的Terraform定义,然后进行正常的terraform apply。就像您为添加的资源一样。

(我知道一个古老的问题,但是我很惊讶地看到任何人提到其他问题。

  1. 列表资源:

    terraform state list
      data.terraform_remote_state.rg
      azurerm_postgresql_database.postgresql_database
      azurerm_postgresql_server.postgresql_server
    
  2. 删除资源

    terraform destroy -target azurerm_postgresql_database.postgresql_database -auto-approve
    

terraform destery -target resource_type.name -target resource_type2.name

相关内容

  • 没有找到相关文章

最新更新