在terraform中解析已断开的已删除状态

在terraform中解析已断开的已删除状态,terraform,Terraform,当terraform尝试部署某个东西,然后在一种状态下超时,如pending或deleting时,该状态最终将更新为successful或deleted,但在tf状态下该状态从未更新,因此当我再次尝试运行某个东西时,它会出错,因为该状态不匹配 错误:等待EC2传输网关VPC附件(tgw-attach-xxxxxxxxx)删除时出错:意外状态“失败”,需要的目标“已删除”。最后一个错误:%!s() 正确的处理方法是什么?我能在terraform中做些什么让它识别AWS中的最新状态吗?这是tf方面的

当terraform尝试部署某个东西,然后在一种状态下超时,如
pending
deleting
时,该状态最终将更新为
successful
deleted
,但在tf状态下该状态从未更新,因此当我再次尝试运行某个东西时,它会出错,因为该状态不匹配

错误:等待EC2传输网关VPC附件(tgw-attach-xxxxxxxxx)删除时出错:意外状态“失败”,需要的目标“已删除”。最后一个错误:%!s()

正确的处理方法是什么?我能在terraform中做些什么让它识别AWS中的最新状态吗?这是tf方面的错误吗?

tl;博士 这可能不是一个bug,而是一种设计选择

您应该进行调查,如果合适(例如资源已成功创建或删除,且状态未适当更新),您可以

  • 运行
    terraform refresh
    ,这将导致terraform根据云提供商实际存在的内容刷新其状态文件
  • 通过操纵地形状态与
    地形状态
    ,删除已删除的资源或添加已创建的资源,手动协调情况
细节 与CloudFormation不同,Terraform处理“故障”的方法是放弃所有内容并出错,让运营商自行调查问题并尝试解决问题。因此,超时的操作被归类为失败,因此相关资源通常不会在Terraform的状态下更新

然而,Terraform确实给了我们一些处理这个问题的方法。首先,我们可以手动操作Terraform的状态文件。我们可以根据自己的喜好添加资源或从状态文件中删除资源,不过这应该谨慎

我们还可以要求Terraform“刷新”其状态,基本上将状态文件与现实进行比较。隐式地,这将删除不再存在的资源,但它不会将在成功Terraform运行之外配置的资源引入状态文件

另一方面,与任何服务提供商交互相关的超时是相关地形提供商(本例中为AWS提供商)的一项功能。只有提供程序可以公开可配置的超时。例如,AzureRM提供程序提供了配置超时的方法,但AWS提供程序似乎没有


人们想当然会努力加入合理的超时值,但通常会发现琐碎的操作需要一段时间才能正确完成。

这听起来像是Terraform和/或提供者的旧版本中的行为。Terraform和AWS提供商是什么版本?Terraform 0.14.5和AWS提供商3.2.0