Terraform 当重构地形代码时,是否有一种合理的方法来更新相应的地形状态?

Terraform 当重构地形代码时,是否有一种合理的方法来更新相应的地形状态?,terraform,Terraform,这里是一个场景-您开发了用于研发组织的地形模块。它们已经被一到两个微服务所使用,这些微服务转化为十几个豆荚。您确定了一个重构机会,比如将一些功能提取到它自己的terraform模块中。很好,但是现在你必须更新十几个地形状态,因为这是地形代码重构的代价 在一次这样的重构之后,我发现自己花了8个小时来更新所有的地形状态。我是以一种特别的方式来做这件事的——用powershell脚本包装各种terraform state命令。经常这样做很快就会失去理智 当然,我们可以说——不要重构。但这是不可能的,因

这里是一个场景-您开发了用于研发组织的地形模块。它们已经被一到两个微服务所使用,这些微服务转化为十几个豆荚。您确定了一个重构机会,比如将一些功能提取到它自己的terraform模块中。很好,但是现在你必须更新十几个地形状态,因为这是地形代码重构的代价

在一次这样的重构之后,我发现自己花了8个小时来更新所有的地形状态。我是以一种特别的方式来做这件事的——用powershell脚本包装各种terraform state命令。经常这样做很快就会失去理智


当然,我们可以说——不要重构。但这是不可能的,因为地形代码是。。。代码。那么,有没有更好的方法呢?某种工具可能会有所帮助?

包装器脚本基本上是您必须采用的方法,但您可以利用可能已经有了Python和Ruby等TF绑定的更强大的解释性语言。什么是TF绑定?你的意思是,当我重命名一个terraform资源名称(TF术语中的地址)时,它们会自动接触到包含该资源的所有terraform远程状态并执行terraform state mv吗?我还觉得这是terraform的最大缺陷之一,重构是如此困难。最好以原子方式将状态移动和升级耦合到声明性状态。我经常认为编写这样一个工具是可能的,但并不容易。您需要返回状态,验证一些先决条件,移动状态,然后将更新应用于模块和tf代码。然后验证计划没有显示任何内容。但要让它发挥作用,你不需要改变任何其他东西,这是很难避免的。