每个环境的AWS VPC,还是针对不同环境的具有多个子网的单个VPC



假设我有三个环境——开发、测试和生产。关于如何在AWS中设置它们,我相信我有两个选择:

  1. 每个环境创建一个VPC,因此总共有三个VPC。然后在每个VPC中添加不同可用区的子网,以实现可用性/冗余性。创建第四个"共享服务"VPC,其中包含所有不同环境所需的服务
  2. 创建一个具有多个子网的VPC。我会在不同的可用性区域中创建子网,并将不同的环境资源均匀地分布在子网中,这样,如果一个区域出现故障,我就不会失去一个环境

以下哪种方法被认为是最佳实践?每种方法的优点或缺点是什么(如果有的话)?我是AWS的新手,到目前为止还无法找到哪个是最好的的确切答案

良好的做法是将生产环境与测试或开发环境完全分离,最好通过为它们建立单独的帐户来实现:

SDLC OU中的帐户承载非生产工作负载,因此不应具有来自其他帐户的生产依赖性

由于您没有使用不同的帐户,因此(如果您想遵循良好做法)最接近的方法是拥有不同的VPC(选项1)。此外,为了进一步分离环境,VPCs可以位于不同的区域

此外,我鼓励您重新思考为什么需要任何公共资源(即第四专有网络)。如果你通过第四个专有网络在prod和devel之间共享一些东西(比如RDS),那就是一场等待发生的灾难。

我遇到了类似的问题。

每个环境的VPC可以在资源之间创建很大的分离,所以我建议至少有PRODnonPRODdev,test,uat)VPC。

每个环境有一个VPC可能会导致成本增加:

  • 每个VPC每个子网的NAT网关/NAT实例
  • VPC端点(它们可能非常昂贵,每个端点大约7美元,您通常需要多个,但您必须记住,每个AZ只能连接一个子网)
  • VPN(每个VPC内部)
  • CICD(如果你使用自托管代理[例如使用Azure DevOps],你需要在每个VPC中都有一个代理)
  • 管理可能会更加困难(更多的冗余资源等)

(当然,你可以使用VPC Peering解决一些问题,但我认为这不是这种情况下的正确解决方案)

另一方面,每个环境有一个VPC可以带来一些好处:

  • 所有ENV的子网矩阵都可以相同,因此更容易调试
  • 每个环境一个VPN可以降低成为"VPN"的机会;意外地在错误的环境中">
  • 将资源相互影响的风险降至最低

对于生产环境,明确的答案是将其隔离到自己的AWS帐户中(而不仅仅是一个单独的VPC)。使用Control Tower和SSO,管理多个AWS帐户的复杂性已今非昔比。

对于非生产环境,如Dev、Staging、QA、Demo等,答案不太清楚。我当然想听听别人的意见。我可以看到三种主要的方法。

  1. 每个环境都有自己的AWS帐户。这可以用于Demo或UAT环境(除了Prod),但对于通常在内部用于开发的其他类型的环境来说,这似乎有些过头了。此解决方案还增加了成本。

  2. 每个环境都有自己的专有网络,在一个共享的AWS帐户中。这将在网络级别和ACL级别上隔离每个环境。

    缺点:

    • 每个AWS账户最多5个VPC
    • 额外费用由[Filip Niko如上所述

    优点:

    • 简化设置?因为所有的VPC都可以相同地配置(例如通过CDK)
    • 环境之间的隔离比下面的解决方案3更好
  3. 每个环境都有自己的网络堆栈,在一个共享的VPC和AWS帐户中。

    缺点:

    • 更难"放下并重新创建";。有了CDK,人们可以很容易地提供新的";"环境";通过创建VPC及其服务。我猜(请确认)当一个VPC包含所有内容时,这会更困难
    • 面向公众的环境不安全

    优点:

    • 一个VPC可以有200个子网。即使每个环境分配3个子网(公共、专用和隔离),也会提供大约60个环境
    • 总体来说更便宜。更少的NAT,需要端点

我很乐意听取有关上述方面的反馈。

最新更新