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

时间:2016-05-26 15:16:03

标签: terraform

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

9 个答案:

答案 0 :(得分:25)

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

  1. refresh - 了解您当前的基础架构。如果在您的terraform脚本之外手动更改了任何内容,这一点非常重要。
  2. plan - 为您准备一份清单,以便查看哪些terraform打算修改或删除(或单独留下)。
  3. apply - 执行计划中列出的更改。
  4. 通过按顺序执行这3个命令,terraform只会按照所需的顺序执行必要的更改,以使您的环境与您的terraform文件的任何更改保持一致。

    我发现破坏是有用的是在非生产环境中,或者在您执行重组的情况下,从头开始将确保更安全的构建。

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

答案 1 :(得分:4)

在@ mwielbut的回答之后发表更多评论。

而不是选项apply + destroy,您需要使用选项terraform + taint

运行apply

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

使用选项planapply,使用代码更新基础架构就足够了。

但是如果你确实需要销毁一些资源并重新构建已经创建的东西,你可以使用taint选项,这是你问题的正确答案,它是如此重要并且错过了@ mwielbut的答案。

  

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

     

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

参考:

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

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

答案 2 :(得分:3)

terraform destroy之前不需要terraform apply

您的Terraform配置(*.tf*.tfvars文件)描述了您所需的基础架构状态。它说"这就是我想要的基础设施。"

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

典型的工作流程可能是:

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

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

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

答案 3 :(得分:1)

Terraform destroy会破坏所有资源,如果要应用增量更改,则不需要它。只有在您想破坏整个基础架构时,才应使用 Destroy

答案 4 :(得分:1)

在申请之前无需使用destroy命令。只要您处于测试期,您就可以使用destroy命令或销毁完整的infra,您可以使用destroy命令

您可以使用以下流程

terraform init terraform plan terraform apply

如果您在状态文件中进行了需要更新的任何手动更改,请使用以下命令更新状态文件。

Terrafrom refresh

答案 5 :(得分:1)

您不需要跑到terraform destroy。如果您对基础架构进行了任何更改,[添加/删除资源],则在下一个terraform plan & terraform apply,更改将自动反映

答案 6 :(得分:0)

在仅运行terraform apply后,您始终可以手动销毁实例。然后,当您运行terraform apply时,它将创建没有terraform destroy的全新实例。

答案 7 :(得分:0)

Terraform apply始终刷新Terraform状态,因此如果您更改任何内容,它会自动识别更改,假设您已更新NSG规则,添加新VM,删除旧VM,因此当您运行 terraform apply ,您的旧状态会更新为您已添加/更新/删除的新状态。

如果您使用 terraform destroy ,它只会杀死整个州,如果您正在运行 terraform,您将返回新状态应用 即可。

只有当您认为自己只想放下基础架构并且实际上并不需要它时,才需要使用 terraform destroy

对于次要主要更改,例如添加组件,更新规则,删除其他内容,您可以毫无问题地使用 计划并应用

答案 8 :(得分:0)

完全没有。

您不需要在terraform applyو之前运行terraform destroy,您的terraform(.tf)文件可以描述基础架构的状态。

terraform apply始终刷新您的基础结构。并且它识别基础结构的状态并对其进行更新。

terraform destroy的唯一用途是关闭并彻底清除基础架构。 (使用前必须三思而后行)可以使用terraform planterraform refresh来确保基础结构的状态。