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