在 VPC 中访问 RDS posgtgreSQL?

Accessing to RDS posgtgreSQL within VPC?

我的 AWS 中有一个 RDS postgreSQL 集成。在我的 RDS PostgreSQL 实例中 public 可访问性是 'NO' 并且我有自己的 VPC 和私有子网。我为我的实例选择私有子网和 VPC。我创建了一个 lambda 函数来使用端点连接同一个 RDS 实例并进行了检查。已成功连接。

现在,我想访问 RDS 实例并在此 RDS postgreSQL 实例上创建一些 table。我如何访问此 RDS 实例以及如何在其上创建 tables?

我在系统中安装了 AWS CLI。我使用以下命令连接 AWS CLI。

psql -h endpoint -p 5432 -U username Databasename

但我收到类似 "connection time out" 的错误。但是为同一个安全组打开了端口5432。

有什么方法可以使用 AWS CLI 进行连接吗?我也有一个 EC2 实例。

有没有人可以帮助我?如果你能在这方面帮助我,那就太好了。期待您的好评..

您需要先连接到同一 vpc 中 public 子网中的 ec2 实例,然后您可以从中连接到 RDS 实例。

由于您的 RDS 实例位于私有子网中并且配置为没有 public 访问权限,因此您将无法直接从 VPC 外部的系统访问它。

您在这里可以做的是使用系统中的腻子或终端对您的 ec2 实例(假设它具有弹性 ip/public dns)执行 ssh/rdp,然后从您的 ec2 访问 rds实例.

您应该启用对端口 22 (ssh) 或端口 3389 (rdp) 的访问以从您的系统访问您的 ec2 实例

既然你提到你是 AWS 的新手,我会尽力回答:

您可以通过 Putty 连接到您的 aws ec2 实例,请按照 this Documentation

Now this is assuming that your ec2 is public subnet and RDS is in Private Subnet of Same VPC

现在假设 EC2 和 RDS 都有不同的安全组,首先你必须:

要在 VPC 安全组中创建允许来自另一个安全组的连接的规则,请执行以下操作:

  • 导航至 安全组 和 Select 或创建一个您希望允许其他安全组成员访问的安全组。在上面的场景中,这将是您将用于数据库实例的安全组。选择添加规则。
  • 从类型中选择 All ICMP。在 Source 框中,开始输入安全组的 ID;这为您提供了一个安全组列表。 Select 具有您希望访问受此安全组保护的资源的成员的安全组。在上面的场景中,这将是您将用于 EC2 实例的安全组。
  • 重复 TCP 协议 的步骤,方法是创建一个规则,将 All TCP 作为类型,并在源框中使用您的安全组.如果您打算使用 UDP 协议,请创建一条规则,将所有 UDP 作为类型,并在源框中创建您的安全组
  • 创建一个自定义 TCP 规则,允许通过您在创建数据库实例时使用的端口进行访问,例如 MySQL 的端口 3306。在源框中输入您将使用的安全组或 IP 地址。

现在您可以使用正常的 sql 连接命令进行连接:

mysql -h myinstance.123456789012.us-east-1.rds.amazonaws.com -P 3306 -u mymasteruser -p

另外更详细的指南可以参考AWS Guide

希望对您有所帮助!

您可以通过两种方式连接到私有子网中的数据库 -

  • 连接到 Nat 实例(public 子网中的 EC2),然后从那里连接到 RDS。
  • 您可以在任何机器上使用有效的 ssh 密钥创建从 Nat 到 RDS 的隧道。

使用 Nat

  1. 首先使用 public IP 或弹性 IP ssh 进入 NAT。

     ssh -i key(pem) key_user@xx.xx.xx.xx(Public IP)
    

然后就可以直接运行命令了。为此你不需要任何 AWs CLI 或 boto

    psql -h endpoint -p 5432 -U username -p Databasename 
  1. 在您的系统中,您可以通过 NAT 创建隧道。为此,您需要在命令行上 运行 。您只需要在您的系统或 NAT 上安装 psql。

     ssh -i key.pem -N -q -o "StrictHostKeyChecking=no" -L 54320:ENDPOINT:5432 key_user@PublicIP &
    

& 将确保进程将 运行 在后台

通过 ps -ef | 确保您的进程在后台 运行ning grep ssh 之后,您可以使用

连接到 psql
    psql -h 127.0.0.1 -p 54320 -U username -p 

此处 54320 是将用于通过隧道连接的本地端口。

对于安全组配置确保你有这些入站规则-

  1. PostgreSQL 从 NAT 打开 5432。您可以通过选择自定义类型来添加 Nat Ip

  1. 应该为 NAT 打开 SSh 22