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

Ste*_*son 4 amazon-web-services amazon-rds amazon-vpc aws-security-group

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

一个简单的解决方案是启用 RDS 副本的公共访问并将 EC2 的 IP 添加到其安全组并且它可以工作。

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

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

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

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

总结一下我的设置:

美国东部

  • 专有网络网段:172.31.0.0/16
  • 路由表条目: VPC10.0.0.0/16对等连接的目标路由us-west-1
  • EC2 IP:172.31.5.234

美国西部

  • 专有网络网段:10.0.0.0/16

  • 路由表条目: VPC172.31.0.0/16对等连接的目标路由us-east-1

  • RDDS:

    • 公众可访问:是
    • 安全组:允许来自172.31.0.0/16

Joh*_*ein 10

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

us-east-1

  • 使用“具有公有子网和私有子网的 VPC”VPC 向导创建了具有us-east-1CIDR 的VPC172.31.0.0/16
  • 公有子网中启动Amazon EC2 Linux 实例

us-west-1

  • 使用“具有公有子网和私有子网的 VPC”VPC 向导创建了具有us-west-1CIDR 的VPC10.0.0.0/16
  • 添加了额外的私有子网以允许创建使用多个可用区的 Amazon RDS 子网组
  • 跨两个私有子网创建RDS 子网组
  • 私有子网中启动了Amazon RDS MySQL 数据库Publicly accessible = No

设置对等互连:

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

配置路由:

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

安全组:

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

测试:

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

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

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

总之,重要的部分是:

  • 建立2路对等连接
  • 在 RDS 实例上配置安全组以允许来自对等 VPC 的 CIDR 的入站连接
  • 无需公开数据库