使用 Terraform 迁移现有基础架构和扩展

Posted

技术标签:

【中文标题】使用 Terraform 迁移现有基础架构和扩展【英文标题】:Migrating existing infrastructure & scaling with Terraform 【发布时间】:2016-01-14 17:36:04 【问题描述】:

我们计划在为我们的云服务提供动力的数据中心中自动创建和删除虚拟机。该服务使得每个新客户都能获得专用的虚拟机(至少 3 个)——因此虚拟机的数量不断增长。我们已经在 ESXi 上运行了大约 2000 个虚拟机。所以我们现在在采用 terraform 之前有两个问题需要解决 -

    我们如何迁移现有的 VM 以由 Terraform 管理(或者我们应该,根本)? 可以编写脚本生成资源规范,但验证计划以确保不受影响将是一项挑战 - 考虑到 VM 的数量以及它们都是 LIVE 的事实,这给工程师带来了额外的压力。

    随着 VM 数量的增加,磁盘上 .tf 文件的数量将不断增加。我们可以将多个虚拟机组合到一个文件中,但这会使以编程方式删除单个虚拟机有点棘手。将文件拆分到多个目录是我能想到的简单解决方法,但是...... 有没有更好的方法来使用 terraform 处理规模?

我找不到任何讨论这些问题的博客,因此在这里从实践经验中寻求一些建议。

【问题讨论】:

【参考方案1】:

很高兴看到社区开始越来越多地就 Stack Overflow 提出 Terraform 相关问题。

关于您的问题:

    迁移现有 VM 以由 Terraform 管理意味着更新 tfstate 文件。到目前为止,还没有办法为已经创建的资源创建资源定义并将其自动放入状态文件中(尽管有像 Terraforming 这样的工具,它部分地并且只针对 AWS 资源)。因此,您必须在 *.tf 文件中描述资源,手动更新 tfstate 文件,然后通过运行 terraform plan 来验证 tfstate == tf,这应该说没有任何更改,应该应用。关于究竟要放入 tfstate 文件的内容 - 我建议首先在 tf 中创建资源定义,然后基于此创建虚拟 VM(terraform apply),在更新的 tfstate 文件中找到相关对象并使用更新这些虚拟值tfstate 文件中虚拟机的实际值(您还需要更新 serial 以防止本地/远程状态不一致错误)。

    除了按目录对它们进行分组之外,我不知道还有其他更聪明的方法可以处理大量相关资源。这样,您可以仅对特定的逻辑分离目录执行计划/应用,但您必须拥有分离的状态文件。它可能很容易被矫枉过正(有点警告,所以不要在家尝试)。

在使用 Terraform 时(尤其是在您拥有大量资源的情况下)时,我主要牢记以下建议:

    组织您的代码,以便您在一个地方拥有模块,而在另一个地方将参数传递给它们。代码的可重用性,或者现在如何调用它:) 在terraform plan 和terraform apply 等命令上使用-target 标志来限制您想要访问的资源。

希望对您有所帮助!更多的人会喜欢Terraform。

【讨论】:

以上是关于使用 Terraform 迁移现有基础架构和扩展的主要内容,如果未能解决你的问题,请参考以下文章

Terraform lambda 函数验证异常

Terraform 初始状态文件创建

Terraform + AWS ECS,持续部署流程?

京东云携手HashiCorp,宣布推出Terraform Provider

在 Terraform 中为价格配置 AWS 自动扩展组?

在Terraform中为价格配置AWS自动扩展组?