Terraform 初始状态文件创建

Posted

技术标签:

【中文标题】Terraform 初始状态文件创建【英文标题】:Terraform initial state file creation 【发布时间】:2016-04-29 10:04:04 【问题描述】:

有没有办法从现有的基础设施创建 terraform 状态文件。例如,AWS 账户附带一些已经到位的服务(例如:默认 VPC)。

但是 terraform 似乎只知道它创建的资源。所以,

    将现有 AWS 基础设施迁移到 Terraform 代码的最佳方法是什么 是否可以手动添加资源并手动修改状态文件(不良影响?)

更新

Terraform 0.7.0 支持导入单个资源。

【问题讨论】:

这还不可能,但已经讨论了很长时间。 github.com/hashicorp/terraform/issues/581 【参考方案1】:

对于相对较小的事情,我在手动修改状态文件以添加存根资源方面取得了一些成功,然后我在顶部继续使用 Terraform(特别是使用预先存在的 VPC 和子网,然后使用 Terraform 应用安全组等)。

对于更复杂的事情,有一个名为terraforming 的非官方工具,我听说它非常擅长生成 Terraform 状态文件,而且还可以与预先存在的状态文件合并。我还没有尝试过,但它可能值得研究。

更新

自 Terraform 0.7 以来,Terraform 现在对使用 import command line tool 导入预先存在的资源具有一流的支持。

从 0.7.4 开始,这会将预先存在的资源导入状态文件,但不会为资源生成任何配置。当然,如果尝试plan(或apply)Terraform 将表明它想要销毁这个孤立的资源。在运行apply 之前,您需要创建配置以匹配资源,然后任何未来的plans(和applys)都应该显示对资源没有任何更改,并愉快地保留导入的资源。

【讨论】:

谢谢@ydaetskcoR,如果顺利的话,我会自己尝试并在这里更新 虽然 terrafroming 缺少很多 AWS 服务更新。与 VPC 配合得很好,这就是我到目前为止所尝试过的【参考方案2】:

使用 Terraforming https://github.com/dtan4/terraforming ,迄今为止它可以生成大多数 *.tfstate 和 *.tf 文件,除了 vpc 对等。

【讨论】:

以上是关于Terraform 初始状态文件创建的主要内容,如果未能解决你的问题,请参考以下文章

如果 Terraform 重新创建在另一个状态中引用的资源怎么办?

将现有 Azure 资源导入本地 Terraform 状态文件

如何从 terraform 状态设置打包程序变量

创建谷歌云存储桶并使用相同的 terraform 脚本将 terraform 状态保存到其中?

使用 1.1 版初始化 Terraform 时出错

如何使用terraform创建Java配置文件