【问题标题】:How can I remove a resource from terraform state?如何从 terraform 状态中删除资源?
【发布时间】:2020-08-01 11:32:36
【问题描述】:

我正在使用 terraform 来管理 AWS 上的 IaC。我的 terraform 项目创建了一个 s3 存储桶,后来我将 s3 存储桶 terraform 移到了另一个项目。所以我删除了我项目中所有与 s3 相关的代码。当我运行terraform apply 时,我收到一条错误消息Error: error deleting S3 Bucket (xxxx): BucketNotEmpty: The bucket you tried to delete is not empty

我了解 terraform 试图删除存储桶,因为我从那里删除了代码。

我尝试使用terraform refresh,但出现禁止错误:Error: Forbidden: Forbidden status code: 403, request id: 8351F9C3663AF8FB, host id:

我知道我可以从本地删除 terraform 状态文件,但这需要我导入所有资源。我该如何解决这个问题?我使用的是本地状态而不是远程状态。

【问题讨论】:

    标签: terraform


    【解决方案1】:

    首先您需要通过运行terraform state rm <resource-id> 从状态文件中删除资源,然后您需要从代码库中删除相关配置。之后运行initplan,您将看到不需要任何更改

    【讨论】:

    • 如另一个答案所述,您也可以使用名称而不是 id
    【解决方案2】:

    您可以通过以下方式删除添加到 Terraform 的任何资源:-

    1. 列出所有状态:- terraform state list

    2. 删除您想要的状态:- terraform state rm <name>

    【讨论】:

      【解决方案3】:
      1. 列出状态

        $ terraform state list
        
        data.terraform_remote_state.rg
        
        azurerm_subnet.vsubnet
        
        azurerm_virtual_network.vnet
        
      2. 移除选中状态。

        $ terraform state rm azurerm_subnet.vsubnet
        
        Removed azurerm_subnet.vsubnet
        
        Successfully removed 1 resource instance(s).
        

      【讨论】:

        【解决方案4】:

        经过一番搜索,我发现解决方案是使用 terraform state rm 从我的本地状态文件中删除 s3 资源。

        【讨论】:

          猜你喜欢
          • 2022-01-15
          • 1970-01-01
          • 2021-09-25
          • 1970-01-01
          • 2020-02-03
          • 2021-08-25
          • 2017-04-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多