在变形destroy
之前是否需要变形apply
?如果没有,您在更新现有基础架构时遵循的工作流程是什么?您如何确定是否需要destroy
?
答案 0 :(得分:25)
在我看来,那将是非常不标准的。 Terraform destroy
仅用于您要完全擦除基础架构的情况。 terraform最大的特点之一是它可以对您所需的基础架构和现有基础架构进行智能增量,并且只需进行所需的更改。通过执行refresh
,plan
和apply
,您可以确保使用terraform:
refresh
- 了解您当前的基础架构。如果在您的terraform脚本之外手动更改了任何内容,这一点非常重要。 plan
- 为您准备一份清单,以便查看哪些terraform打算修改或删除(或单独留下)。 apply
- 执行计划中列出的更改。通过按顺序执行这3个命令,terraform只会按照所需的顺序执行必要的更改,以使您的环境与您的terraform文件的任何更改保持一致。
我发现破坏是有用的是在非生产环境中,或者在您执行重组的情况下,从头开始将确保更安全的构建。
*还有边缘情况,terraform可能无法理解正确的操作顺序(我首先修改安全组还是安全组规则?),或者它会发现自己处于依赖循环中并且无法执行操作。然而,在这些情况下,破坏运行是核解决方案。一般情况下,我会手动执行问题更改(通过命令行或AWS控制台,如果我在AWS中),轻轻一点,然后运行refresh
,plan
,{{1序列回到正轨。
答案 1 :(得分:4)
在@ mwielbut的回答之后发表更多评论。
而不是选项apply
+ destroy
,您需要使用选项terraform
+ taint
apply
通常我们根本不需要运行terraform destroy
。这是一个非常危险的选择,特别是对于生产环境。
使用选项plan
和apply
,使用代码更新基础架构就足够了。
但是如果你确实需要销毁一些资源并重新构建已经创建的东西,你可以使用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 plan和terraform refresh来确保基础结构的状态。