从 EC2 实例连接到不同区域的 RDS

Connect to RDS in a different region from EC2 instance

所以我在 us-east-1 中有一个主 RDS,在 us-west-1 中有一个副本。两者都在各自区域的 VPC 内。我想让 us-east-1 中的一个 EC2 实例连接到副本实例。

一个简单的解决方案是为 RDS 副本启用 public 访问权限,并将 EC2 的 IP 添加到其安全组,并且它有效。

但我不想允许静态 IP,而是希望允许访问我的 us-east-1 VPC 的整个 CIDR 范围,而且我不希望我的实例 public 可访问。

为此,我在两个区域之间设置了 VPC 对等连接,并在两个 VPC 的路由表中添加了条目,以将流量转发到彼此的 CIDR 范围到对等连接。

EC2 实例的 CIRD 范围是 172.31.0.0/16,我已将其添加到 us-west-1 区域中 RDS 副本的安全组中。但出于某种原因,无法从我的 EC2 访问 RDS。

我还错过了什么吗?谢谢!

总结一下我的设置:

美国东部:

美国西部:

为了重现您的情况,我执行了以下操作:

us-east-1中:

  • 使用 "VPC with Public and Private Subnets" VPC 向导
  • us-east-1 中创建了一个 CIDR 为 172.31.0.0/16 的 VPC
  • public 子网
  • 中启动了一个 Amazon EC2 Linux 实例

us-west-1中:

  • 使用 "VPC with Public and Private Subnets" VPC 向导
  • us-west-1 中创建了一个 CIDR 为 10.0.0.0/16 的 VPC
  • 添加了一个额外的私有子网以允许创建使用多个 AZ 的 Amazon RDS 子网组
  • 跨两个私有子网
  • 创建了一个 RDS 子网组
  • 私有 子网中启动了 Amazon RDS MySQL 数据库 Publicly accessible = No

设置对等:

  • us-east-1 中,为 us-west-1
  • 中的 VPC 创建了一个 对等连接请求
  • us-west-1 中,接受 对等请求

配置路由:

  • us-east-1中,配置Public路由Table(EC2实例使用)路由10.0.0.0/16流量到对等 VPC
  • us-west-1 中,配置 私有路由 Table(由 RDS 实例使用)以将 172.31.0.0/16 流量路由到对等 VPC

安全组:

  • us-east-1 中,创建了一个安全组 (App-SG),允许来自 0.0.0.0/0 的入站端口 22 连接。将其关联到 EC2 实例。
  • us-west-1 中,创建了一个安全组 (RDS-SG),允许来自 10.0.0.0/16(对等连接的另一端)的入站端口 3306 连接。将其关联到 RDS 实例。

测试:

  • 使用 ssh 连接到 us-east-1
  • 中的 EC2 实例
  • 已安装 mysql 客户端(sudo yum install mysql
  • 已连接到 mysql:
mysql -u master -p -h xxx.yyy.us-west-1.rds.amazonaws.com

通过对等连接成功连接到 RDS 数据库。

仅供参考,数据库的 DNS 名称解析为 10.0.2.40(在 us-west-1 VPC 的 CIDR 范围内)。此 DNS 解析适用于两个 VPC。

总而言之,重要的位是:

  • 建立双向对等连接
  • 在 RDS 实例上配置安全组以允许来自对等 VPC 的 CIDR 的入站连接
  • 无需使数据库public可访问