在 terraformdestroy
之前需要 terraformapply
吗?如果没有,您在更新现有基础架构时遵循的工作流程是什么?您如何决定是否destroy
需要?
11 回答
在我看来,这将是非常不标准的。Terraformdestroy
仅在您想要完全擦除基础架构的情况下使用。terraform 的最大特点之一是它可以对您所需的基础设施和现有基础设施进行智能增量,并且只进行所需的更改。通过执行refresh
,可以确保 terraform plan
:apply
refresh
- 对您当前的基础架构有最新的了解。如果在 terraform 脚本之外手动更改任何内容,这一点很重要。plan
- 为您准备一个列表,以查看 terraform 打算修改或删除(或不理会)的内容。apply
- 执行计划中列出的更改。
通过按顺序执行这 3 个命令,terraform 只会按照所需的顺序执行必要的更改,以使您的环境与对 terraform 文件的任何更改保持一致。
我发现 destroy 有用的地方是在非生产环境中,或者在您执行具有如此侵入性的重组的情况下,从头开始可以确保更安全的构建。
*还有一些极端情况,terraform 可能无法理解正确的操作顺序(我是先修改安全组还是修改安全组规则?),或者它会发现自己处于依赖循环中并且无法执行操作. 然而,在这些情况下,运行破坏是一种核解决方案。一般来说,我会手动执行问题更改(通过命令行或 AWS 控制台,如果我在 AWS 中),推动它,然后运行refresh
, plan
,apply
序列以回到正轨。
noterraform destroy
之前不需要terraform apply
。
您的 Terraform 配置(*.tf
和*.tfvars
文件)描述了您的基础设施的所需状态。它说“这就是我希望我的基础设施成为的样子。”
您使用该terraform
工具来计划和应用更改,以使您的基础架构进入您描述的所需状态。您可以在不破坏任何内容的情况下逐步进行这些更改。
典型的工作流程可能是:
- 对文件
.tf
进行更改.tfvars
- 刷新状态
- 计划变更
- 审查计划的变更
- 应用这些更改
如果您想彻底摧毁该基础设施,您terraform plan -destroy
可以查看 Terraform 打算摧毁什么。如果您对此感到满意,那么您将使用terraform destroy
它来摧毁它。
通常,destroy
很少使用,除非您正在为临时目的(例如,构建)配置基础架构或测试您从具有不同参数的全新状态配置的能力。即使这样,您也可以使用count
资源参数通过增加计数来临时配置资源,然后在不再需要时再次减少它。
@mwielbut 回答后的更多评论。
而不是 option apply
+ destroy
,您需要terraform
使用 option taint
+运行apply
通常我们根本不需要运行terraform destroy
。这是一个非常危险的选择,尤其是对于生产环境。
使用选项plan
and apply
,用代码更新基础设施就足够了。
但是,如果您确实需要销毁一些资源并重新构建已经创建的东西,您可以使用选项taint
,这是您问题的正确答案,它非常重要,在@mwielbut 的答案中被遗漏了。
terraform taint 命令手动将 Terraform 管理的资源标记为已污染,强制将其销毁并在下一次应用时重新创建。
此命令不会修改基础架构,但会修改状态文件以将资源标记为受污染。一旦资源被标记为污染,下一个计划将显示该资源将被销毁并重新创建,并且下一个应用将实施此更改。
参考:
命令污点: https ://www.terraform.io/docs/commands/taint.html
选项示例taint
:
https ://www.terraform.io/docs/modules/usage.html
Terraform destroy 会销毁所有资源,如果您想应用增量更改,则不需要它。只有当你想破坏整个基础设施时才应该使用Destroy 。
你不需要跑到terraform destroy
. 如果您对基础架构进行了任何更改,[添加/删除资源],下一步terraform plan & terraform apply
,更改将自动反映
应用前无需使用destroy 命令。只要您处于测试阶段,您就可以使用 destroy 命令或销毁完整的基础设施,您可以使用 destroy 命令
您可以使用以下流程
terraform init
terraform plan
terraform apply
如果您在状态文件中进行了任何需要更新的手动更改,请使用以下命令更新状态文件。
Terrafrom refresh
Terraform apply 始终刷新 Terraform 状态,因此如果您更改任何内容,它会自动识别更改,假设您已更新 NSG 规则、添加新 VM、删除旧 VM,因此当您再次运行terraform apply时,您的旧状态会得到使用您添加/更新/删除的新状态进行更新。
如果您使用terraform destroy ,它只会杀死整个状态,如果您正在运行terraform apply,您将回到新状态。
只有当你认为你只是想降低你的基础设施并且你并不真的需要它时,你才需要使用terraform destroy 。
对于添加组件、更新规则、删除其他内容等次要 - 重大更改,您可以毫无问题地使用计划和应用。
根本没有。
您不需要运行terraform apply
之前 terraform destroy
و 您的 terraform (.tf) 文件描述了您的基础设施的状态。
terraform apply
始终刷新您的基础架构。它识别基础设施的状态并对其进行更新。
terraform destroy
唯一的用途是摧毁并彻底摧毁你的基础设施。(使用前必须三思而后行)您可以使用terraform plan和terraform refresh来确保基础设施的状态。
你总是可以手动销毁你的实例,只运行你的terraform apply
. 然后,当您运行terraform apply
它时,它将创建没有terraform destroy
.
核心 Terraform 工作流: 核心 Terraform 工作流有五个步骤:
写入 - 将 基础设施编写为代码。
Terraform init -它会自动将合作伙伴和社区提供者直接下载并安装到本地磁盘,以便其他命令 Plugin_Installation、Backend_Initialization、ChildModule_Installation 和 Community 和第三方插件使用
Terraform 计划 - 应用前预览更改。
Terraform Apply - 提供可重现的基础设施。
Terraform destroy -它会破坏您的基础设施。
不!当您需要修改资源时,您不需要运行 terraform destroy !这就是 Infra-as-Code 的美妙之处。
以下是有关 Terraform 初始化、计划、应用和销毁的更多详细信息 -
terraform init
命令用于初始化包含 Terraform 配置文件的工作目录。这是在编写新的 Terraform 配置或从版本控制克隆现有配置后应该运行的第一个命令。多次运行此命令是安全的。terraform plan
命令创建一个执行计划。默认情况下,创建计划包括: a) 读取任何已经存在的远程对象的当前状态,以确保 Terraform 状态是最新的。b) 将当前配置与先前状态进行比较,并注意任何差异。c) 提出一组更改操作,如果应用,应该使远程对象与配置匹配。terraform apply
命令执行 Terraform 计划中建议的操作。(您可以在没有计划的情况下进行申请,但这不是最佳做法)terraform destroy
命令是销毁由特定 Terraform 配置管理的所有远程对象的便捷方法。