我目前正在一个完全由Terraform环境管理的工作中,但是我遇到了一些限制,我想知道是否有某个功能或变通办法可以实现我想要的功能:
我有一个这样描述的环境:
一切正常,但是当我想通过运行terraform destroy
进行完全清理时,我必须使用-target
选项逐个销毁一些资源,然后手动删除状态文件中的某些引用。
我要这样做的两个原因:
只是因为失败
不知道为什么,但是我无法使用Terraform手动破坏某些子网(无法分离Internet网关),但是我能够通过简单地破坏VPC来破坏它们。
在这种情况下,我想告诉Terraform仅删除VPC,这样做,AWS会自动销毁相关组件,例如子网,Internet网关,路由表,网络ACL等。
因为它会更快
我正在使用带有Kubernetes(和Helm)提供程序的Terraform来定义我的Kubernetes配置,但是当我运行terraform destroy
时,它将删除所有Kubernetes资源,然后是集群(和工作人员)。
仅删除群集会更快。
这是我的问题: 是否可以在Terraform配置文件中将资源排除到销毁过程中?
答案 0 :(得分:1)
实际上没有办法做我想做的事,但是文档说:
与其使用-target作为对非常大的配置的隔离部分进行操作的方法,不如将大的配置分解为几个可以分别应用的较小的配置。数据源可用于访问有关在其他配置中创建的资源的信息,从而可以将复杂的系统体系结构分解为易于管理的部分,这些部分可以独立更新。
如果我们使用标准模式(一种用于VPC的配置,一种用于集群和工作器的配置,一种用于kubernetes的配置),这将不适用于某些用例,因为销毁VPC仍会销毁所有组件,然后再销毁该组件。 VPC(并会导致失败)。
这是一个可能的解决方法,目标是创建两个配置:
使用这种模式,我们可以使用destroy命令创建一个简单的CLI:
terraform destroy
我在Terraform github存储库上发布了一个问题,以提出一项增强功能,即一种注释系统,该系统允许插件与带注释的资源进行交互并收听不同的事件(创建,破坏,状态刷新等)
如果您是同一情况,请查看该问题,添加+1并发表您的看法!
答案 1 :(得分:1)
这允许您创建一个计划来销毁除模块“module.exclude.me”之外的所有资源
terraform plan -destroy $(for r in `terraform state list | fgrep -v module.exclude.me` ; do printf " -target ${r} "; done) -out destroy.plan
来自相应的 github 问题的感谢来自 cmacrae:https://github.com/hashicorp/terraform/issues/2253
答案 2 :(得分:0)
我还看到破坏资源时出现地形故障,需要手动干预。 recommended way似乎是将所需的资源模块化为单独的配置,然后根据需要计划/销毁它们。对于您的情况,请为EKS配置说一个单独的eks.tf。