备份Terraform状态文件

时间:2018-12-02 05:41:25

标签: terraform

我通常通过堡垒服务器运行所有Terraform脚本,并且包括tf状态文件在内的所有代码都位于同一服务器上。发生此事件时,我的机器意外停机(硬重启),并且根文件系统被损坏。 现在我的状态文件消失了,但是我的资源仍然存在并且正在运行。我不想再次运行terraform apply来在停机的情况下重新创建整个环境。从这种混乱中恢复的最佳方法是什么,可以做些什么,以防止将来再次发生这种情况。

我已经看过terraform refreshterraform import。但是还有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

如果仍然无法恢复terraform状态。您可以使用terraforming来创建Terraform配置蓝图以及特定aws资源的状态,但是需要一些人工来编辑状态以管理资源。您可以拥有此状态文件,运行Terraform Plan并将其输出与您的基础结构进行比较。最好具有远程状态,尤其是使用任何对象存储(例如aws s3)或键值存储(例如领事)时。它支持在多个事务同时发生时锁定状态。备份过程也非常简单。

答案 1 :(得分:1)

  

和我所有的代码(包括tf状态文件)都驻留在同一服务器上。

由于您没有.backup文件,所以不确定是否可以以Terraform方式顺利恢复状态文件,请让我知道是否找到了一种方法:)。但是,您可以采取一些步骤来帮助您摆脱这种情况。

最佳做法是将所有状态文件保存在S3或Blob之类的远程存储中,并configure保留在backend中,以便每次销毁或创建新堆栈时,它始终与状态文件联系远程地。

在此之上,您可以利用terraform workspace的优势来避免在多环境情况下混乱的状态文件。还可以考虑为先前部署的回溯和版本控制创建计划。

terraform plan -var-file "" -out "" -target=module.<blue/green>
  

可以做什么,这样以后就不会再出现了。

Terraform蓝绿色部署是您问题的答案。我们花了很长时间实现了该模型,并且运行平稳。整个想法是模块化和可重用性,相同的模板可用于具有不同体系结构的5个不同组件,而无需停机。

module tree

我们正在利用Terraform module的优势。我们有蓝色和绿色两个模块,您可以命名。在任何给定的时间点,蓝色或绿色都会占用流量。如果要进行一些更改,我们将根据状态输出(基于terraform状态的目标模块)带来备用堆栈,自动验证它,然后将流量移至新堆栈并销毁旧堆栈。

Here是一篇您可以保留作为参考的文章,但这完全不能反映我们一开始所做的事情。

Blue-Green Deployment

答案 2 :(得分:0)

请参阅this blog post,不幸的是,它说明了import是唯一的解决方案。