9

我正在建立一个支持 WebApp 的基础设施。我的一个存储库拥有所有网络基础设施(VPC、子网、NAT、堡垒等)。WebApp 有一个 Route 53 + ALB + AutoScalling 组 + EC2 实例。所有这些都在 Cloudformation 模板中编码。我的问题是 WebApp Cloudformation 模板是否应该与应用程序存储在同一个存储库中?有没有关于如何分离基础设施和应用程序代码的最佳实践?

4

3 回答 3

2

作为一般规则,您应该将基础设施放在应用程序代码旁边。所以,是的,您应该将它放在同一个存储库中。

当然,您可能会遇到一些资源在不同项目之间共享的情况。在这种情况下,我建议您拥有一个单独的存储库,其中仅包含共享的基础设施。我在这里要做的是:

  • 共享基础设施的一个存储库:VPC、公共和私有子网、dns 根区域。
  • 一个包含您的 webapp 及其相关基础架构的存储库。

这使您能够同时实施构建工件和应用新基础架构的管道。

于 2020-03-05T20:26:57.470 回答
1

这确实是一个见仁见智的问题,但我认为趋势是使用代码保留应用程序/服务所需的一切。话虽如此,您通常会拥有共享的东西(例如 VPC),最终您通常会将它们放在单独的存储库中(取决于您如何组织代码;这些天似乎在推动单一存储库)。

CloudFormation Best Practices提供了一些关于组织堆栈的好信息,尽管它没有解决您的问题。

于 2020-03-05T01:09:48.657 回答
1

我将提出以下思考:

包含 IaC 代码似乎是一种自然的进展,随着项目的发展,当您遇到以下障碍时,您将其拆分:

  • 部署的项目现在涉及多个源项目/存储库
  • 根据谁有权访问存储库来保护/防止对 IaC 代码的意外更改
  • 干净的提交历史记录对于观察基础设施和部署的变化是可取的

我个人喜欢在做某事时遵循阻力最小的路径——当它是单个开发人员并且您正在快速制作概念验证原型时,将 TF 文件和 ci-cd 管道集中在一个地方肯定会有优势。一旦您共享了您的代码库并制定了更严格的标准,那么就该让您的标准成熟起来了。

根据您的经验,如果您知道项目最终会需要它,那么从一开始就包含许多最佳实践(聚合日志记录、SAST/DAST、代码检查和已发布的贡献指南)可能是有意义的。但是,如果您仍然是第一次浏览所有这些概念,那么等到它成为一个痛点可能是有意义的。技术债务YAGNI的种类。

于 2022-01-14T07:05:17.900 回答