我似乎找不到任何关于使用一个 VPC 还是多个 VPC 来托管应用程序的良好做法的具体指导。这关联涉及该主题,但相当老旧并且没有真正提供答案。
我目前正在将传统托管环境(包含约 50 个应用程序和两个数据库场(SQL Server 和 Oracle))迁移到 AWS;总资产约为 250 台 Windows 服务器。目前,每个应用程序基本上都位于自己的 /24 子网中。
我得到的建议是每个应用程序和数据库场都应该位于自己的 AWS 账户和 VPC 中,但我不确定这种方法是否明智;尤其是将应用程序与数据库分离的部分。
我不太担心账户,因为这更像是一个计费问题。但就 VPC 而言,我试图了解以下两者之间的区别:
- 在 1 个 VPC 内复制整个环境,而不是。
- 引入 50 个 VPC 来托管相同数量的应用程序/服务器。
在 (1) 和 (2) 之间做出选择时应该考虑什么,或者在中间做出一些妥协。我查看了 AWS 文档,但确实找不到有关此主题的任何明确建议。
我认为,主要区别在于网络流量全部在 VPC 内,还是在 VPC 间。这意味着:
- 现在有了额外的成本,因为 VPC 间流量需要付费,而 VPC 内流量则不需要。
- 由于需要选择、设置和管理诸如 Peering 或 Transit Gateway 之类的 Inter-VPC 机制,因此存在一些额外的复杂性。
但是,以上任何一点都不是采取这种或那种做法的明确理由;虽然 50 个 VPC 相当多,但是所讨论的数字完全在 Peering 的限制范围内。
还有什么我应该考虑的吗?
- VPC 内流量和 VPC 间流量等的性能特征如何?
其他考虑因素:
- 必须跨 VPC 管理 CIDR 块以避免冲突。
- 对等连接的最大 MTU 为 1500 字节
- 默认情况下,VPC 间流量未加密。
- DNS 复杂性。
谢谢你的帮助。
答案1
我设计了一些企业 AWS 网络,当您所要求的区域有许多工作负载时,以下是我的一般建议(着陆区设计的完整建议是我为客户举办的为期两天的研讨会)
- 每个应用程序、每个环境一个帐户(例如,app1 有开发、预生产和生产的帐户,app2 有自己的帐户,等等)
- 每个应用程序的所有资源(如应用服务器、数据库服务器等)都存放在该帐户中。跨帐户拆分应用服务器和数据库会增加成本,而没有任何实际好处。
- 共享服务帐户可用于大多数应用程序所需的功能 - AD,
- 保安员应掌握守卫职责、安全设备等
- 用于通信的传输网关,以及本地连接(解决您的网络问题)
- 联合到您选择的目录服务器 - 本地、AD 服务、Azure AD 等
- 使用 AWS 组织,通过服务控制策略获得高级权限,并使用 IAM 角色允许用户只执行您想要的操作 - 例如,不允许他们禁用安全服务、更改互联网网关或 VPN 等边界内容等
- 考虑使用共享 VPC降低带宽成本——但要小心,这是一个棘手的问题
这可以为您提供良好的隔离并降低您的影响范围,但您需要良好的自动化,因为您将拥有 150 个帐户。帐户只是计费和 VPC 的容器。是的,您需要为带宽支付更多费用。
为了降低带宽成本,另一种方法是将所有内容都放在一个 VPC 中。这会使隔离、控制和影响半径成为问题。
答案2
此外,对于我的产品,我使用一个单独的、高度封闭的账户来备份生产环境(RDS、S3 等),并且备份在生产运行的不同区域。封闭账户中的灾难恢复测试每 15 天进行一次,以确保备份有效!