在VPC中访问RDS posgtgreSQL?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在VPC中访问RDS posgtgreSQL?相关的知识,希望对你有一定的参考价值。

我的AWS中有一个RDS postgreSQL intsnce。在我的RDS PostgreSQL实例中,public accessibilty为'NO',我拥有自己的VPC和私有子网。我为我的实例选择了私有子网和VPC。我创建了一个lambda函数来使用端点连接相同的RDS实例并进行检查。它已成功连接。

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

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

psql -h endpoint -p 5432 -U username Databasename

但我得到一个错误,如“连接超时”。但是为同一个安全组打开了端口5432。

有没有办法使用AWS CLI连接?我也有一个EC2实例。

有人帮我吗?如果你可以帮助我,这将是很好的。等待你的有利重播..

答案

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

  • 连接到Nat Instance(公共子网中的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
  2. 在您的系统中,您可以通过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

enter image description here

  1. 应该为NAT打开SSh 22
另一答案

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

另一答案

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

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

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

另一答案

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

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

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

enter image description here

现在假设EC2和RDS首先具有不同的安全组,您将不得不:

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

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

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

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

另外,对于更多详细指南,您可以参考AWS Guide

希望这有助于你!

enter image description here

以上是关于在VPC中访问RDS posgtgreSQL?的主要内容,如果未能解决你的问题,请参考以下文章

在单独的VPC中从EC2实例访问RDS

如果我们使用默认 VPC 和安全组将公开访问设置为“否”,为啥 EC2 实例无法访问 RDS 实例?

AWS Lambda + NAT 网关的替代方案

在 RDS 中访问 MySQL 或 MS SQL 时的 AWS Lambda node.js ETIMEDOUT

从 VPC 中的 Lambda 访问 AWS S3

使用 terraform 在非默认 VPC 中创建 AWS RDS 实例