管理 Terraform 项目存储库的最佳实践

管理 Terraform 项目存储库的最佳实践

作为新工作角色的一部分,我最近开始学习 Terraform。之前,我的主要编排/配置工具是 Ansible,我以前所在公司的最佳做法是将整个项目的状态保存在一个存储库中(如果需要,可以将公司角色添加为子模块)。

在我的新工作中,团队使用许多小型存储库,每个存储库用于单个 TF“项目”或甚至是环境的一部分(例如,一个存储库配置底层 VPC 和区域相关内容,另一个存储库配置该 VPC 内的应用程序资源)。对于 Terraform 来说,保持存储库之间的这种分离程度(除了分离现成的模块外)是一种常见的最佳实践吗?

答案1

对此有很多不同的看法,包括不久前 AWS 发布时引发的(轻微的)骚动一些信息关于他们如何重新构建为一个整体。

如果我正在设置这个,我会考虑以下几点:

  • 规模。您需要管理多少个模块?将可重复使用的 TF 模块分别放在单独的存储库中是否会给管理带来挑战,还是将它们全部放在同一个存储库中会更容易?您已经达到这个规模了吗?您认为您会达到吗?
  • 协调。不确定这是否是最好的词,但让不同的存储库执行同一配置过程的不同部分听起来不是我喜欢的方法,因为这会使依赖关系难以跟踪和调试。如果网络设置之类的事情尚未完成怎么办?肯定有办法解决这个问题,但这是需要考虑的另一件事。

类似地,如果您需要管理多个帐户,则将每个帐户设置在不同的 repo 中意味着如果您需要对所有帐户应用更改,则可能需要提出大量 PR。

我的第一直觉可能是将模块放在单独的存储库中,但将部署(将模块粘合在一起)放在一个大型的 monorepo 中。但这只是我的直觉,没有互联网上的背景信息……

再次强调,这只是我的观点。SF 并不总是喜欢意见问题,所以这个可能会被关闭,但如果没有的话 - 一些值得思考的东西!

最后(快速编辑)——请记住,这主要不是 AWS 所说的单向门。您可以随时重新架构,只是这可能并不简单。因此,从现在有什么好的,还有什么应该会好一段时间,并根据需要进行更改。

相关内容