Terraform 在应用调用之间存储tfstate

Terraform 在应用调用之间存储tfstate,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我已经使用terraform为我的AWS VPC设置创建了一个配置。我们的想法是在每次部署中使用terraform apply,以及terraform destroy-目标aws_nat_gateway.nat_gateway删除aws nat gateway,因为它只需要正确部署应用程序 我应该如何在每次部署之间共享/存储我的terraform.tfstate? 我也考虑过使用terraform show命令,但我不知道该如何将其加载回terraform中 我是否也应该存储terraf

我已经使用terraform为我的AWS VPC设置创建了一个配置。我们的想法是在每次部署中使用
terraform apply
,以及
terraform destroy-目标aws_nat_gateway.nat_gateway
删除aws nat gateway,因为它只需要正确部署应用程序

  • 我应该如何在每次部署之间共享/存储我的terraform.tfstate
    • 我也考虑过使用terraform show命令,但我不知道该如何将其加载回terraform中
  • 我是否也应该存储terraform.tfstate.backup它的职责是什么
  • 是否有其他方法确保使用现有专有网络?(如果存在,则将其名称硬编码为SQL表

Terraform的
-target
选项不打算作为任何常规工作流程的一部分使用,而是作为一种在异常情况下解决bug和限制的方法,否则您可能会被阻止

考虑到您的潜在问题,而不是您提出的解决方案,听起来您的系统设计要求NAT网关只在其他操作发生时出现,然后您希望它被销毁

Terraform不是这个场景的理想工具,因为它通常用于描述和管理长期存在的基础设施,在您最初创建基础设施后,基础设施将无限期地保持活动状态。但是,如果您确实希望使用Terraform来解决这个问题,那么我建议您将问题分解为更小的部分,然后使用来协调以正确的顺序运行一些单独的Terraform操作

具体地说,我将编写一个Terraform配置,它只描述在采取其他操作后立即要销毁的“临时”对象(您的NAT网关,以及与之连接的任何其他对象),然后编写另一个单独的Terraform配置,其中包含依赖于该NAT网关的操作。为了举例说明,我们假设它们位于两个兄弟目录中,分别名为
transient
persistent
,每个目录都是一个单独的Terraform配置,具有自己配置的后端

然后,您可以按如下顺序自动执行此操作:

  • terraform-chdir=transient init
    (准备“transient”工作目录)
  • terraform-chdir=transient apply
    (创建NAT网关)
  • terraform-chdir=persistent init
    (准备“persistent”工作目录)
  • terraform-chdir=persistent apply
    (计划并对长寿命对象应用任何必要的更改)
  • terraform-chdir=transient destroy
    (破坏NAT网关)

这个答案间接地回答了您的一个问题,我现在也将更直接地回答:这里的
transient
persistent
目录都有自己的状态,当某人打算仅销毁NAT网关时,尽量减少错误导致其销毁长寿命对象的可能性。

您是否尝试询问过?@mawgsaysrestemonica刚刚询问过。:)将是我的第一个停靠港:-)东南欧永远是我最后的选择,而不是第一个。专门论坛的成员总数可能没有那么多,但他们通常有更多的人了解主题并经常使用。另外,由于您没有代码可显示,因此很有可能有人会投票结束此问题。祝你好运我希望你能找到答案。你应该认真研究使用terraform后端,比如S3后端,将你的状态文件存储在一个中心位置。