我已经使用terraform为我的AWS VPC设置创建了一个配置。其思想是在每个部署中使用terraform apply,以及使用terraform destroy -target aws_nat_gateway.nat_gateway删除AWS网关,因为它只需要正确部署应用程序。
发布于 2021-04-14 17:55:20
Terraform的-target选项并不打算作为任何常规工作流的一部分使用,而是作为在异常情况下处理bug和限制的一种方法,否则您可能会被阻塞。
考虑到您的基本问题而不是建议的解决方案,听起来您的系统设计要求只有在发生其他操作时才会出现NAT网关,然后您希望它被销毁。
Terraform并不是这个场景的理想工具,因为它通常用于描述和管理长期存在的基础设施,在您最初创建它之后,它将无限期地保持活动状态。但是,如果您确实希望使用Terraform来解决这个问题,那么我建议将问题分解成更小的部分,然后使用自动化按照正确的顺序编排运行几个单独的Terraform操作。
具体来说,我会编写一个Terraform配置,它只描述您想要在执行其他操作后立即销毁的“临时”对象(您的NAT网关,以及与它相关的任何东西),然后是另一个单独的Terraform配置,它意味着依赖于该NAT网关的操作。为了示例起见,让我们假设这些目录位于名为transient和persistent的两个同级目录中,每个目录都是一个单独的Terraform配置,具有自己配置的后端。
然后,您可以使用如下所示的序列来自动执行此操作:
terraform -chdir=transient init (准备“临时”工作目录)terraform -chdir=transient apply (创建NAT网关)terraform -chdir=persistent init (准备“持久”工作目录)terraform -chdir=persistent apply (计划并将任何必要的更改应用于长寿对象)terraform -chdir=transient destroy (摧毁NAT网关)这个答案间接地回答了您的一个问题,我现在也将更直接地回答这个问题:这里的transient和persistent目录将各有各自的状态,这样,当某人打算只摧毁NAT网关时,错误就不太可能导致破坏长期存在的对象。
https://stackoverflow.com/questions/67087260
复制相似问题