在使用terraform之前需要进行地形破坏吗?

fip*_*ips 9 terraform

在terraform destroy之前需要terraform apply吗?如果没有,您在更新现有基础架构时遵循的工作流程destroy是什么?如何确定是否需要?

mwi*_*but 29

在我看来,那将是非常不标准的.Terraform destroy仅用于您要完全擦除基础架构的情况.terraform最大的特点之一是它可以对您所需的基础架构和现有基础架构进行智能增量,并且只需进行所需的更改.通过执行refresh,plan并且apply可以确保terraform:

  1. refresh - 了解您当前的基础架构.如果在您的terraform脚本之外手动更改了任何内容,这一点非常重要.
  2. plan - 为您准备一份清单,以便查看哪些地形要修改或删除(或单独留下).
  3. apply - 执行计划中列出的更改.

通过按顺序执行这3个命令,terraform将仅按所需顺序执行必要的更改,以使您的环境与您的terraform文件的任何更改保持一致.

我发现破坏是有用的是在非生产环境中,或者在你正在进行如此侵入性的重组的情况下,从头开始将确保更安全的构建.

*还有边缘情况,terraform可能无法理解正确的操作顺序(我首先修改安全组还是安全组规则?),或者它会发现自己处于依赖循环中并且无法执行操作.然而,在这些情况下,破坏运行是核解决方案.在一般情况下,我将手动执行问题的变化(通过命令行或AWS控制台,如果我在AWS是),沿轻推它,然后运行refresh,plan,apply序列重回正轨.


BMW*_*BMW 5

@mwielbut的答案后有更多评论。

代替选项apply+ destroy,您需要terraform使用选项taint+ 运行apply

通常我们根本不需要运行terraform destroy。这是一个非常危险的选择,尤其是对于生产环境。

使用option planapply,足以用代码更新基础结构。

但是,如果您确实需要销毁一些资源并重新构建已经创建的内容,则可以使用的选项taint,这是您问题的正确答案,它非常重要,在@mwielbut的答案中被忽略了。

terraform taint命令手动将Terraform管理的资源标记为已污染,强制将其销毁并在下一次应用时重新创建。

此命令不会修改基础结构,但会修改状态文件,以将资源标记为已污染。将资源标记为已污染后,下一个计划将显示该资源将被销毁并重新创建,而下一个应用将实施此更改。

参考:

命令污点:https//www.terraform.io/docs/commands/taint.html

选项的示例tainthttps : //www.terraform.io/docs/modules/usage.html


小智 5

terraform destroy不是之前需要terraform apply

您的 Terraform 配置(*.tf*.tfvars文件)描述了您的基础架构所需的状态。它说“这就是我希望我的基础设施成为的样子。”

您可以使用该terraform工具来规划和应用更改,以使您的基础架构进入您所描述的所需状态。您可以在不破坏任何内容的情况下逐步进行这些更改。

典型的工作流程可能是:

  • 更改.tf.tfvars文件
  • 刷新状态
  • 计划变更
  • 审查计划的变更
  • 应用这些更改

如果您想完全破坏该基础设施,您terraform plan -destroy可以查看 Terraform 打算破坏的内容。如果你对此感到满意,那么你会用terraform destroy它来摧毁它。

通常,destroy很少使用,除非您为临时目的(例如,构建)配置基础设施或测试您从具有不同参数的全新状态配置的能力。即使这样,您也可以使用count资源上的参数通过增加计数来临时配置资源,然后在不再需要时再次减少它。