0

我的 AWS 中有一个 RDS postgreSQL intsnce。在我的 RDS PostgreSQL 实例中,公共可访问性为“否”,我有自己的 VPC 和私有子网。我为我的实例选择该私有子网和 VPC。我创建了一个 lambda 函数来使用端点连接同一个 RDS 实例并进行了检查。它已成功连接。

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

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

psql -h endpoint -p 5432 -U username Databasename

但我收到“连接超时”之类的错误。但是为同一个安全组打开了5432端口。

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

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

4

4 回答 4

2

有两种方法可以连接到私有子网中的数据库 -

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

使用 Nat

  1. 首先使用公共 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 | 确保您的进程在此之后在后台运行 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
于 2017-12-27T07:36:52.210 回答
0

既然您提到您是 AWS 的新手,我将尝试相应地回答:

您可以通过 Putty 连接到您的 aws ec2 实例,请遵循此文档

现在假设您的 ec2 是公共子网,RDS 位于同一 VPC 的私有子网中

在此处输入图像描述

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

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

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

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

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

此外,对于更详细的指南,您可以参考AWS 指南

希望这对你有帮助!

在此处输入图像描述

于 2017-12-27T07:19:21.493 回答
0

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

于 2017-12-27T06:28:26.873 回答
0

由于您的 RDS 实例位于私有子网中并且配置为不具有公共访问权限,因此您不会直接从您的系统外部的 VPC 访问它。

您可以在此处使用系统中的 putty 或终端对您的 ec2 实例执行 ssh/rdp(假设它具有弹性 ip/public dns),然后从您的 ec2 实例访问 rds。

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

于 2017-12-27T06:57:57.253 回答