Terraform 地形应用前是否需要摧毁地形?
在应用地形Terraform 地形应用前是否需要摧毁地形?,terraform,Terraform,在应用地形之前是否需要地形销毁?如果没有,那么在更新现有基础设施时,您遵循的工作流程是什么?您如何决定是否需要销毁?在我看来,这是非常不标准的。Terraformdestroy仅在您希望完全擦除基础设施的情况下使用。terraform最大的特点之一是,它可以对您所需的基础设施和现有的基础设施进行智能增量,并且只进行所需的更改。通过执行刷新、计划和应用可以确保地形: 刷新-对您当前的基础架构有最新的了解。如果在terraform脚本之外手动更改了任何内容,这一点非常重要 计划-准备一份列表,供您查
之前是否需要地形销毁
?如果没有,那么在更新现有基础设施时,您遵循的工作流程是什么?您如何决定是否需要销毁?在我看来,这是非常不标准的。Terraformdestroy
仅在您希望完全擦除基础设施的情况下使用。terraform最大的特点之一是,它可以对您所需的基础设施和现有的基础设施进行智能增量,并且只进行所需的更改。通过执行刷新
、计划
和应用
可以确保地形:
刷新
-对您当前的基础架构有最新的了解。如果在terraform脚本之外手动更改了任何内容,这一点非常重要李>
计划
-准备一份列表,供您查看terraform打算修改或删除(或不修改)的内容李>
应用
-执行计划中列出的更改
通过按顺序执行这3个命令,terraform将只执行必要的更改,以使您的环境与terraform文件的任何更改保持一致
我发现destroy在非生产环境中很有用,或者在执行侵入性很强的重构时,从头开始可以确保更安全的构建
*还有一些边缘情况,terraform可能无法理解正确的操作顺序(我是先修改安全组还是先修改安全组规则?),或者它会发现自己处于依赖循环中,无法执行操作。然而,在这些情况下,运行销毁是一个核解决方案。一般来说,我会手动执行问题更改(通过命令行或AWS控制台,如果我在AWS中的话),推动问题,然后运行刷新
,计划
,应用
序列以回到正轨。在@mwielbut的回答后有更多评论
您需要使用taint
+apply
选项运行terraform
,而不是apply
通常,我们根本不需要运行terraformdestroy
。这是一个非常危险的选择,尤其是在生产环境中
使用选项plan
和apply
,可以用代码更新基础结构
但是,如果您确实需要销毁一些资源并重新构建一些已经创建的内容,您可以使用污点
选项,这是您的问题的正确答案,它非常重要,并且在@mwielbut的答案中被遗漏了
terraform taint命令手动将terraform托管资源标记为已污染,强制在下一次应用时将其销毁并重新创建
此命令不会修改基础结构,但会修改状态文件,以便将资源标记为已污染。一旦资源被标记为污染,下一个计划将显示该资源将被销毁并重新创建,下一个应用程序将实现此更改
参考:
命令污染:
选项污点的示例:
只要运行terraform应用程序,就可以手动销毁实例。然后,当您运行terraform apply
时,它将创建全新的实例,而不使用terraform destroy
在terraform apply
之前不需要terraform destroy
您的地形配置(*.tf
和*.tfvars
文件)描述了您的基础结构的所需状态。它说“这就是我希望我的基础设施的样子。”
您可以使用terraform
工具来规划和应用更改,以使您的基础结构达到您所描述的所需状态。您可以增量地进行这些更改,而不会破坏任何内容
典型的工作流可能是:
- 对
.tf
和.tfvars
文件进行更改
- 刷新状态
- 计划变更
- 审查计划的变更
- 应用这些更改
如果你想彻底摧毁基础设施,你可以使用terraformplan-destroy
查看terraform打算摧毁什么。如果您对此感到满意,那么您可以使用地形销毁
来销毁它
通常,destroy
很少使用,除非您正在为临时目的(例如构建)调配基础架构,或者测试您使用不同参数从无到有地调配基础架构的能力。即使如此,您也可以对资源使用count
参数来临时调配资源,方法是增加计数,然后在不再需要时再次减少计数。Terraform destroy会销毁所有资源,如果您想应用增量更改,则不需要此参数。仅当您要销毁整个基础结构时才应使用Destroy。在应用之前无需使用Destroy命令。只要您处于测试阶段,就可以使用destroy命令或销毁整个infra,您可以使用destroy命令
你可以使用下面的流程
terraforminit
地形图
地形应用
如果您进行了任何需要在状态文件中更新的手动更改,请使用以下命令更新状态文件
Terrafrom refresh
您不需要运行到terraform destroy
。如果您对基础设施进行了任何更改,[添加/删除了资源],在下一个地形规划和地形应用
,这些更改将自动反映地形应用始终刷新地形状态,因此,如果您更改了任何内容,它将自动识别更改,假设您已更新NSG规则,添加了新的VM,删除了旧的VM,所以当您再次运行terraform apply时,您的旧状态将得到恢复