【问题标题】:How do I prevent resources from being destroyed during the Azure DevOps Terraform Plan Step?如何防止资源在 Azure DevOps Terraform 计划步骤中被破坏?
【发布时间】:2021-01-08 12:15:33
【问题描述】:

我继承了一些职责,我的意思是在 AzureDevOps Release Pipeline 部署中管理 Terraform。

我正在通过以下步骤使用 Terraform 任务: 在里面 证实 计划 申请

但在计划输出期间,我可以看到一些我不想被删除的资源正在被破坏。

azurerm_key_vault_secret.kv_secret_az_backup_storage_account_name will be destroyed

我一直在寻找在创建 tfstate 文件期间禁用任何资源破坏的方法,但在 Azure DevOps 中似乎没有方法。所以我最好的选择是我想修改底层的 main.tf 脚本,但我不知道怎么做。

这是被删除的资源之一。我已重命名以保持匿名。谁能建议我的困境的解决方案?

resource "azurerm_key_vault_secret" "kv_secret_az_storage_account_name" {
  name         = "storage-account-name"
  value        = azurerm_storage_account.storage_account.name
  key_vault_id = azurerm_key_vault.keyvault.id
  depends_on   = [azurerm_storage_account.storage_account]
}

【问题讨论】:

    标签: azure-devops terraform terraform-provider-azure


    【解决方案1】:

    plan 阶段不会破坏您的资源,也不会创建新资源。它确实会告诉您运行 apply 时会发生什么。

    所以

    azurerm_key_vault_secret.kv_secret_az_backup_storage_account_name 将被销毁

    这只是说,如果您运行 apply,您的存储帐户将被销毁。

    但由于它试图删除,这意味着 terrafrom 将有关此资源的信息保持在状态。所以它是用 terraform 创建的,现在如果你想把它放到这里的范围之外——我的意思是你不想让你的 teffafrom 脚本再维护它,你可以使用state rm command

    从 Terraform 状态移除的项目不会被物理销毁。从 Terraform 状态中移除的项目不再由 Terraform 管理。例如,如果您从状态中删除一个 AWS 实例,该 AWS 实例将继续运行,但 terraform plan 将不再看到该实例。

    【讨论】:

    • 您好,感谢您的回复。在我的 tf 脚本中的代码块中看起来如何?另外,因为我希望 tf 将来能够处理资源,删除 state rm 命令会重新引入该资源的状态吗?
    • 要重新引入你需要使用terraform state mv,你不应该把它放在任何脚本中。这是一个命令,因此您应该从命令行将其作为任何命令运行。它将针对您配置的后端工作,请注意这一点并提供创建备份的参数。
    • @DonDraper 如果我的回复对您有帮助,您可以考虑点赞吗?
    猜你喜欢
    • 1970-01-01
    • 2018-12-23
    • 2021-09-22
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    相关资源
    最近更新 更多