Terraform 地形应用前是否需要摧毁地形?

Terraform 地形应用前是否需要摧毁地形?,terraform,Terraform,在应用地形之前是否需要地形销毁?如果没有,那么在更新现有基础设施时,您遵循的工作流程是什么?您如何决定是否需要销毁?在我看来,这是非常不标准的。Terraformdestroy仅在您希望完全擦除基础设施的情况下使用。terraform最大的特点之一是,它可以对您所需的基础设施和现有的基础设施进行智能增量,并且只进行所需的更改。通过执行刷新、计划和应用可以确保地形: 刷新-对您当前的基础架构有最新的了解。如果在terraform脚本之外手动更改了任何内容,这一点非常重要 计划-准备一份列表,供您查

在应用地形
之前是否需要地形
销毁
?如果没有,那么在更新现有基础设施时,您遵循的工作流程是什么?您如何决定是否需要销毁?

在我看来,这是非常不标准的。Terraform
destroy
仅在您希望完全擦除基础设施的情况下使用。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时,您的旧状态将得到恢复