如何更快地进行大型代码库的 Terraform 持续部署?

How to do terraform continuous deployment of large codebases faster?

我们有一个大型的 terraform 和 ansible 基础设施代码库。有些任务需要像 adding/modifying a role/playbook 这样的小改动。但是合并请求 运行 并部署整个阶段 1) 提供 vm > 2) 安装软件 > 3) 使用 playbook 更改配置 VM。

第 2 步的问题在于,每次都需要花费大量时间才能真正运行完成剧本。

想学习更好的CD方式,谢谢

您正在将基础架构即代码和配置即代码结合起来。拆分 Ansible 和 Terraform 是一个很好的模式。所以首先使用 Terraform 进行配置。然后使用 Ansible 配置。 Terraform 和 Ansible 之间应该是解耦的。

针对您所描述的情况,一种常见的方法是预先构建自定义虚拟机映像,这些映像已经包含您在 运行 时需要的软件,然后最后的配置步骤可以只关注添加只能在 运行 时间学习的任何最终配置设置,例如 VM 中的软件可能依赖的某些其他服务的网络位置。

实现此目的的一种方法是在单独的构建步骤中使用 HashiCorp Packer 从已经可用的基础映像派生自定义机器映像。 Packer 可以选择 运行ning Ansible 作为准备映像的一种方式,因此如果您已经将软件安装步骤(第 2 步)定义为 Ansible 剧本,那么您可以将步骤的子集用作机器映像步骤,然后让您现有的步骤 3 运行 Ansible 再次完成,以完成 运行ning 机器。

只有当您创建新 VM 的频率比更改要安装的软件的频率高时,此方法才会有效,因为它依赖于在多个 VM 引导中分摊构建映像的成本的能力。如果您无论如何都需要为每次更改更改已安装的软件,那么实际上没有任何通用的优化方法,因为您只能更改执行步骤的顺序,而不是更改每个步骤的频率 运行 .