问题描述
在进行金丝雀部署(Canary Deployments)时,我们希望能够启动一个全新的部署,并能够访问数据库(DB)。但由于安全性考虑,该数据库是私有连接到现有虚拟私有云(VPC)的。我们想知道其他人是如何将新的VPC与现有的数据库连接起来的?是使用Peering连接吗?如果子网需要为每次部署更改,如何处理Peering连接的切换?在哪里管理这种状态?
由于数据库的数据量较大(TB级别),迁移数据库到新的VPC并不可行,特别是如果我们在发布过程中变得更快。
尝试使用相同的VPC和子网进行多次部署时,负载均衡器只允许在一个端口上设置一个监听器,无法实现多个监听器,因此使用Terraform时会出现问题。
如果尝试在同一个VPC内使用各自的子网,同样会遇到问题,并且在使用Terraform分配网络地址空间之前,没有简便的方法进行操作。
我们主要使用Amazon Elastic Container Service (ECS),同时也使用其他AWS服务。
解决方案
以下操作可能涉及到AWS的高级配置,操作前请确保你对相关服务有足够的了解,并在进行任何更改之前备份重要数据。
最佳解决方案
在这种情况下,您可以考虑使用VPC Peering 来连接现有的VPC和新的VPC,从而实现两个VPC之间的通信。以下是如何执行的步骤:
创建新的VPC: 创建一个新的VPC,该VPC将用于新的部署。确保为新的VPC分配适当的CIDR块。
创建VPC Peering 连接: 在AWS管理控制台中,通过导航到“VPC Peering Connections”,创建一个VPC Peering 连接,连接新的VPC和现有的VPC。在这一步中,您需要指定两个VPC的VPC ID以及每个VPC的CIDR块。
更新路由表: 在新的VPC和现有VPC中,更新各自的路由表,以便它们可以通过VPC Peering 连接进行通信。确保将通信流量路由到正确的VPC Peering 连接。
处理子网更改: 由于每次部署都需要更改子网,您可以在VPC Peering 连接中的路由表中更新子网的CIDR块。
Terraform 配置: 如果您使用Terraform进行基础设施管理,您可以创建对应的Terraform配置来创建和管理VPC Peering 连接以及路由表的更新。
备选方案
如果您不想使用VPC Peering,您还可以考虑以下备选方案:
使用NAT 网关: 在新的VPC中设置NAT网关,以允许新VPC中的资源访问现有VPC中的数据库。但是这可能会增加一些网络延迟。
考虑VPC Endpoint: 如果您的数据库是由某些AWS服务提供(如Amazon RDS),您可以考虑在新的VPC中设置VPC Endpoint来访问数据库,从而避免跨VPC的流量。
调整Terraform 配置: 对于Terraform配置问题,您可以尝试调整配置,以便能够在单个子网上设置多个监听器。
总结
在进行AWS中VPC迁移时,使用VPC Peering 连接是一种常见的方法,允许不同VPC之间的安全通信。通过创建VPC Peering 连接,更新路由表以及适当地处理子网更改,您可以实现不同VPC之间的有效通信。如果不希望使用VPC Peering,还有其他备选方案可供考虑。无论您选择哪种方法,都需要确保在进行任何更改之前,详细了解相关服务和配置。