我正在寻找一些用于部署镜像环境的良好模式和反模式(为简单起见,让我们说一个 EC2 实例以及 RDS 和 S3 存储桶,这是一种非常常见的设置)。假设我们必须这样做数百甚至数千次。我已经提出了一些想法,例如
多个帐户 - 单一用途 - 使用所有区域
- 我们为每个区域部署一个 VPC 实例,并在该区域部署我们的一组服务。
- 好,保证隔离并且没有
noisy neighbors
,TF模块或CloudFormation模板不会复杂 - 糟糕,一场可怕的管理噩梦
单一账户 - 多用途
- 我们将 VPC 分割成多个子网,并按子网分组部署资源
- 好,更容易管理,事半功倍
- 不好,您每个区域的子网数量被软限制为 20 个(16 个区域 * 20),可能存在嘈杂的邻居,网络最终可能会变成意大利面条
我正在寻找更多的方法来做到这一点,以及为什么它们会不好(技术债务、不可维护)或好的(易于重用等)
太感谢了
所以关于这个相当复杂的话题要说几点一般性的观点——这在很大程度上取决于你真正想要实现的目标。
你有三个选择:
单个 VPC - 一组大型子网 - 在您的示例中,这将是 4 - 2 个“公共”子网和 2 个“私有”子网。然后使用安全组来隔离“部署”——我看到,使用子网进行分离没有任何好处,除了必须管理 IP 地址空间和大量子网。最终,子网之间的唯一区别通常是:AZ/route-table/nacl/dhcp-options - 如果其中一个发生更改,则仅使用新子网。子网本身不会给您带来任何“吵闹的邻居”问题。它不是经典的“vlan”意义上的第 2 层域,上游互联网网关是水平可扩展的,没有限制,根据:Amazon VPC 常见问题
多个 VPC - 如果您有一个帐户 - 您可以在一个区域中拥有多个 VPC,软限制为 5 个 VPC,但硬最大为:
亚马逊 VPC 限制
这是相当高的,在您的示例中,您可以说可能有 4 个安全组(ELB、EC2 ASG、RDS、管理员访问),所以理论上意味着 2,500 个 VPC?我没有听说有人有这个,但它可能是一种选择。
但是,根据您的平台的自动扩展性,要考虑的另一件事是,某些限制是帐户范围的,如果您针对一个部署点击它们,那么它可能会影响另一个 - 例如,只是特定类型的实例计数 - 或 Lambda 并发执行限制。所以这导致了第三种选择......
多个账户 - 现在您可以通过 API 创建新账户,这要归功于 AWS Organizations API,但遗憾的是,限制页面在账户数量方面的限制是模糊的。虽然我听说大型企业有 1000 个帐户。请参阅:AWS Organizations 的限制以及如何使用 AWS Organizations 自动创建端到端账户
总体而言,对于您的用例,您将需要一个干净的 CloudFormation 堆栈,该堆栈可以以最小的变化完全重复使用 - 只是为了部署、操作和支持的一致性。对我来说,这指向 VPC 作为部署单元或帐户作为部署单元。在这两种情况下,您都需要小心注意限制。在具有大型子网或按子网拆分的 VPC 中执行此操作最终将变得难以维护 - 我的主观看法。