You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Terraform自动删除Recovery Service Vault时出现报错

解决Terraform自动销毁Azure备份资源时的Location header缺失错误

问题场景

使用Terraform部署以下Azure资源:

  • 存储账户
  • Azure文件共享
  • Azure Blob容器
  • Recovery Service Vault
  • 配置Azure文件共享的备份策略
  • 为文件共享和Blob容器启用备份

资源创建流程完全正常,但执行terraform destroy自动销毁时触发错误:

Error: deleting Azure File Share backups item StorageContainer;storage;<RESOURCE_GROUP_NAME>;<STORAGE_ACCOUNT_NAME> (Vault <RECOVERY_SERVICE_VAULT_NAME>): Location header missing or empty

根据Azure官方要求,删除Recovery Service Vault前必须完成三步操作:

  1. 禁用Vault的软删除功能
  2. 移除所有备份项
  3. 注销关联的存储账户

手动通过Azure Portal完成上述步骤后,销毁操作可成功执行;直接在控制台运行terraform_data中定义的Azure CLI命令也能正常完成,但通过Terraform自动销毁就会触发上述错误。

排查过程

进一步分析发现,自动销毁时Terraform会尝试重复销毁azurerm_backup_protected_file_share.shared_storage_backup和azurerm_backup_container_storage_account.shared_storage_register这两个资源,且这些销毁操作是并行执行的。而Azure的备份资源销毁存在依赖关系,必须按顺序序列化执行,并行操作会导致API返回异常,出现Location header缺失的错误。

解决方法

通过添加time_sleep资源并调整资源间的依赖关系,强制Terraform按正确顺序执行销毁操作:

  1. 先销毁备份保护项azurerm_backup_protected_file_share
  2. 等待一段时间确保备份项完全移除
  3. 再销毁存储账户的注册容器azurerm_backup_container_storage_account
  4. 最后销毁Recovery Service Vault

示例代码片段:

resource "time_sleep" "wait_for_backup_item_removal" {
  create_duration = "30s"

  depends_on = [
    azurerm_backup_protected_file_share.shared_storage_backup,
  ]
}

resource "azurerm_backup_container_storage_account" "shared_storage_register" {
  # ... 原有配置 ...
  
  depends_on = [
    time_sleep.wait_for_backup_item_removal,
  ]
}

resource "azurerm_recovery_services_vault" "backup_vault" {
  # ... 原有配置 ...
  
  depends_on = [
    azurerm_backup_container_storage_account.shared_storage_register,
  ]
}

验证结果

调整依赖并添加等待资源后,执行terraform destroy可自动完成所有资源的销毁操作,不再触发Location header缺失的错误。

内容的提问来源于stack exchange,提问作者phanxen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:31:04