我很难理解如何处理deposed
TF状态中的资源.
特别是,在运行apply时,我现在遇到如下错误:
Error applying plan: 11 error(s) occurred: * aws_instance.mongo-replica-01 (deposed #0): Error terminating instance: InvalidInstanceID.NotFound: The instance ID 'i-0f0bdc2c16e922fbc' does not exist status code: 400, request id: 71b98708-cb06-4f11-ad14-8d3d160fbc1a * aws_instance.mongo-replica-01 (deposed #1): Error terminating instance: InvalidInstanceID.NotFound: The instance ID 'i-080ef01dc84c09685' does not exist status code: 400, request id: 07c96f82-1e32-4944-a1d6-ab0e6306b82e * aws_instance.mongo-replica-02 (deposed #1): Error terminating instance: InvalidInstanceID.NotFound: The instance ID 'i-085b997daac742c1e' does not exist status code: 400, request id: 20ff2b73-39c9-4d49-af41-f4ec542ec782 * aws_instance.mongo-replica-02 (deposed #0): Error terminating instance: InvalidInstanceID.NotFound: The instance ID 'i-00bc7fd15b04a3688' does not exist status code: 400, request id: cdea3c4f-9bec-496a-aedd-bcfbf0a706d2
有问题的AWS EC2实例确实不存在,但在尝试删除它们时可能会出现TF错误(可能是因为它们不存在),并且仍然将它们保持在状态.
我尝试使用该terraform state
命令试图删除deposed
资源,但它只允许我删除整个资源,而不仅仅是deposed
它的实例...
我希望,简单地说,手动进入terraform状态文件并删除废弃的部分??
从GitHub Issue请求有关“已废除”状态的文档
“已废弃”是Terraform处理create_before_destroy时资源进入的状态...由于给定资源只能有一个“主”实例,因此Terraform将首先废弃现有资源(因此仍处于状态跟踪,但没有更长的时间用于插值),然后创建替换实例,最后删除已废除的实例。
在此过程中发生的错误可能导致被废弃的实例停留在状态中,因为Terraform不想在删除它们之前就无法对其进行跟踪。但是,此行为在早期的Terraform版本中有点不一致,并且Terraform还会以静默方式处理已废弃的实例,而不是将其包含在计划输出中。
因此,所有这些都可以说:这些废弃实例是在用create_before_destroy替换这些资源期间由于故障而遗留的。如果查看Terraform状态文件(terraform.tfstate或.terraform / terraform.tfstate取决于是否启用了远程状态),则应通过搜索被废除的单词来查找这些记录。您可以使用Terraform为这些数据库存储的数据来决定是否可以安全删除它们,然后再让Terraform继续进行。
因此,您可以推断出这些资源的“已废弃”状态仅表示在此destroy
阶段引起错误的潜在问题。如引用中所述,由于缺少更好的用语,应该在下一次运行时“解决”“已废弃”的资源terraform apply
。同时,检查tfstate
文件以获取terraform已存储的任何/所有特定信息,以确定继续进行安全和/或潜在地诊断问题所在的安全性。
此外,您可以尝试以下方法刷新本地状态
terraform refresh Update local state file against real resources
也,
terraform debug Debug output management terraform state Advanced state management