如何分解terraform状态文件

时间:2021-07-13 21:10:18

标签: module terraform terraform-provider-aws

我正在寻找有关如何最好地将 terraform 状态文件分解为更小的状态文件的指导/建议。

我们目前为每个环境都有一个状态文件,但它已经变得无法管理,所以我们现在希望每个 terraform 模块都有一个状态文件,因此我们需要分离出当前状态文件。

最好将其指向一个新的 s3 存储桶,然后运行计划并申请分解的模块并为每个模块生成一个新的状态文件,或者有更简单或更好的方法来实现这一点吗?

>

2 个答案:

答案 0 :(得分:3)

这完全取决于您的环境是如何配置的以及停机时间有多重要?

以下是两种一般情况,我可以从您的问题中想到。

第一个场景 -(如果你能抽出时间)

  1. 通过为每个模块定义单独的后端并从那时起配置基础架构,销毁您获得的所有内容并从头开始。因此,现在您可以进行后端隔离,并且基础架构管理变得更加容易。

第二个场景 - (如果你不能抽出时间)

  1. 假设您正在运行绝对不能停机的关键任务工作负载。
  2. 在这种情况下,您必须制定适当的计划,将庞大的单体应用后端迁移到较小的后端。
  3. Terraform 有一个名为 terraform state mv 的命令,它可以帮助您将一种 terraform 状态迁移到另一种状态。
  4. 在处理场景时,从较低级别的环境开始,然后从那里开始工作。
  5. 记下您在较低级别环境中迁移过程中遇到的任何注意事项,同样的注意事项也适用于较高级别环境

一些有用的链接 https://www.terraform.io/docs/cli/commands/state/mv.html https://www.terraform.io/docs/cli/commands/init.html#backend-initialization

答案 1 :(得分:0)

尽管唯一的其他答案(截至目前)仅列出了两个选项 - 另一个选项是您可以简单地制作 terraform 存储库(或文件夹,但您正在处理您的基础架构) - 然后执行 terraform import 以将现有基础设施引入那些(希望如此)存储库。

一旦所有的导入都被证明是成功的,你就可以删除原始的 repo/source/etc。整体地形状态。

需要注意的是,每个新状态源的代码必须与现有代码和状态匹配,否则会失败。