首页 > 解决方案 > 如何在 terraform 中回滚到以前的状态

问题描述

我正在处理 terraform 任务并试图了解状态文件是如何工作的。我创建了 main.tf 文件,其中

vpc,firewall,subnet,compute_instance

必须在 GCP 中创建。因此,我已将其应用于 GCP 环境并terraform.tfstate创建了一个文件名文件,并将此文件备份到名为 1st-run 的文件夹中。

现在我更新了我main.tf

2vpc,2firewalls,2subnets,compute_instance

因为我需要为我的 vm.Did terraform 应用添加另一个 nic,并且创建了环境并创建了 terraform.tfstate 文件。我将此文件备份到名为2nd-run.

我想回滚我为第一次运行执行的环境。我有第一次运行文件夹中的状态文件。

通过使用 statefile 而不是触摸代码来回滚的命令是什么,以便我的 GCP 环境自动拥有

vpc,firewall,subnet,compute_instance

这是我第一次执行。

标签: terraform

解决方案


没有办法回滚到今天在 Terraform 中的状态文件中描述的先前状态。Terraform 总是以从先前状态(最新状态快照)移动到配置所代表的目标状态为目标来计划更改。Terraform 还将配置用于状态中未跟踪的信息,例如提供程序配置。

在 Terraform 中表示“回滚”的常用方法是将您的配置置于版本控制中并在每次更改之前提交,然后如果需要,您可以使用版本控制系统的功能恢复到旧配置。

但是,并非所有更改都可以完全通过还原 VCS 更改来回滚。例如,如果您provider在一次提交中为该提供者添加了一个新块和资源,然后应用了结果,为了回滚,您需要更改配置以仍然包含该provider块但包含任何resource块,因此您需要在还原期间调整配置。然后,Terraform 将使用剩余的provider块来配置提供程序以运行销毁操作,之后您最终也可以删除该provider块。


推荐阅读