我正在使用Terraform(v0.12.28
)启动我的AWS环境(AWS provider v2.70.0
)
当我尝试使用terraform destroy
删除所有资源时,我面临以下错误:
error deleting subnet (subnet-XXX): timeout while waiting for state to become 'destroyed' (last state: 'pending', timeout: 20m0s)
我可以添加我的Terraform代码,但我认为我的资源堆栈中没有什么特别之处,基本上包括:
在我的案例中,问题似乎与连接到ALB的ENIs有关-从AWS控制台可以看出:
在寻找解决方案时,我注意到这是一个常见的问题,可能来自不同的资源和依赖类型。
在这个问题中,我将集中讨论与VPC组件(子网、ENI等)和依赖于它们的资源(负载均衡器、EC2、Lambda函数等)相关的问题,这些问题可能由于需要分离阶段而无法删除删除之前。
我们将非常感谢您的帮助。
(*)此环境(DEV)的Terraform用户具有完全管理员权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
所以这不应该与政策有关。
有关问题的例子:
更新:在AWS Lambda的VPC改进后,影响HashiCorp Terraform资源删除的问题(解决方案不起作用-我有AWS提供商的更新版本)。
AWS VPC-无法分离“正在使用”的AWS Lambda VPC ENI
Lambda相关EC2子网和安全组删除问题及改进
AWS:删除子网超时,因为扩展组
等待路由表(rtb-xxxxxx)被破坏时出错:等待状态被破坏时超时
等待Internet网关分离/群集已附加节点组时出错
我刚才碰到这个问题...
一个(hacky)解决方案是尝试通过AWS控制台删除子网。AWS将告诉你是什么阻止了子网被删除——对我来说,在Terraform有权删除我的子网之前,需要分离并删除两个网络接口。
正如Mathew Tinsley所说,有时AWS会隐式地创建一些相关资源,而Terraform无法自行销毁这些资源。
我在试图销毁EKS群集时遇到了这个问题,因为我已经在群集上部署了服务,特别是负载均衡器。为了解决这个问题,我手动删除了负载均衡器和关联到负载均衡器的安全组。
Terraform不知道k8s提供的资源,也不会清理依赖资源。
如果您不确定是什么资源阻止Terraform破坏基础设施,您可以尝试以下方法:
terraformapply
恢复到良好状态,然后在再次运行terraformdestroy
之前使用kubectl
清理资源
AmazonEKS
此问题的另一个变体是DependencyViolation
错误。前任:
错误删除VPC:依赖违反:vpc'vpc-xxxxx'有依赖关系,不能删除
我用绝地武士连接redis服务器。Redis ip值在一个单独的文件中配置,我试图在初始化期间加载该文件 我从redis获取多个密钥的方法如下 当我在属性文件中给出了不正确的ip值时,访问它的请求线程等待了很长一段时间。我的请求不应该因为池中资源不可用而停止。 在这里,我附加了停顿线程的线程转储(即;处于等待状态的线程) 我怎样才能做到这一点?非常感谢您的帮助。提前感谢:-)
我一直在尝试使用android studio emulator,但我无法在emulator上运行我的应用程序。当我运行我的应用程序时,它会显示带有以下详细信息的模拟器: > Hax已启用 Hax ram\U尺寸0x40000000 HAX正在工作,emulator以快速virt模式运行。 端口5554上的控制台;5555港口ADB 之后,将进入下一个选项卡启动应用程序,并显示等待设备联机。之后显示
在Bash脚本中,我想做如下操作: 一、 例如,在后台启动两个应用程序,并给他们60秒时间完成工作。然后,如果他们没有在这段时间内完成,就杀了他们。 不幸的是,上面的方法行不通,因为< code>timeout是一个可执行文件,而< code>wait是一个shell命令。我试着把它改成: 但是这仍然不起作用,因为< code>wait只能在同一个shell中启动的PID上调用。 有什么想法吗?
问题内容: 我想知道WebDriver等待超时和隐式等待超时之间的技术差异。 问题答案: 如文档中所述: 在内部设置将用于所有连续搜索的超时。如果找不到该元素,它将尝试在指定的时间内反复查找该元素。它仅执行此操作,不能强制执行其他任何操作- 它等待元素显示。 ,或者只是您用于特定搜索的一次计时器。它具有更大的可扩展性,意味着您可以将其设置为等待可能需要的任何条件。通常,您可以使用一些预构建的元素来
问题内容: 在Bash脚本中,我想执行以下操作: 即,在后台启动两个应用程序,并给它们60秒以完成其工作。然后,如果他们没有在该时间间隔内完成,请杀死他们。 不幸的是,上述内容不起作用,因为它是可执行文件,而它是Shell命令。我尝试将其更改为: 但这仍然行不通,因为只能在同一外壳程序内启动的PID上进行调用。 有任何想法吗? 问题答案: 将PID写入文件并像这样启动应用程序: 这将创建另一个hi
问题内容: 我使用Node.js和TypeScript,并且使用。这是我的测试用例: 我想为整个功能设置一个超时时间。即如果要花费2秒,花费0.5秒,花费5秒,我想在3秒钟后让我抛出错误的超时。 正常调用是一个问题,因为范围丢失了: 而且我不能用普通的方式抓住它: 有关如何解决的任何想法? 问题答案: 您可以使用超时: 您必须将其包装在诺言中才能使用。