如何从 terraform 状态中删除资源?
Posted
技术标签:
【中文标题】如何从 terraform 状态中删除资源?【英文标题】:How can I remove a resource from terraform state? 【发布时间】: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 状态文件,但这需要我导入所有资源。我该如何解决这个问题?我使用的是本地状态而不是远程状态。
【问题讨论】:
【参考方案1】:首先您需要通过运行terraform state rm <resource-id>
从状态文件中删除资源,然后您需要从代码库中删除相关配置。之后运行init
、plan
,您将看到不需要任何更改
【讨论】:
如另一个答案所述,您也可以使用名称而不是 id【参考方案2】:您可以通过以下方式删除添加到 Terraform 的任何资源:-
列出所有状态:-
terraform state list
删除您想要的状态:-
terraform state rm <name>
【讨论】:
【参考方案3】:列出状态
$ terraform state list
data.terraform_remote_state.rg
azurerm_subnet.vsubnet
azurerm_virtual_network.vnet
移除选中状态。
$ terraform state rm azurerm_subnet.vsubnet
Removed azurerm_subnet.vsubnet
Successfully removed 1 resource instance(s).
【讨论】:
【参考方案4】:经过一番搜索,我发现解决方案是使用 terraform state rm
从我的本地状态文件中删除 s3 资源。
【讨论】:
以上是关于如何从 terraform 状态中删除资源?的主要内容,如果未能解决你的问题,请参考以下文章
Terraform:删除身份块不会删除从资源天蓝色逻辑应用程序分配的身份