在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
- 首先使用公共IP或弹性IP ssh进入NAt。
ssh -i key(pem) key_user@xx.xx.xx.xx(Public IP)
然后您可以直接运行该命令。你不需要任何AWs CLI或botopsql -h endpoint -p 5432 -U username -p Databasename
- 在您的系统中,您可以通过NAT创建隧道。为此,您需要在命令行上运行它。您只需要在您的系统或NAT上安装psql。
ssh -i key.pem -N -q -o "StrictHostKeyChecking=no" -L 54320:ENDPOINT:5432 key_user@PublicIP &
并将确保该流程将在后台运行 在此之后通过ps -ef |确保您的进程在后台运行grep ssh之后,您可以使用连接到psqlpsql -h 127.0.0.1 -p 54320 -U username -p
这里54320是用于通过隧道连接的本地端口。
对于安全组配置确保您具有这些入站规则 -
- PostgreSQL从NAT打开了5432。您可以通过选择自定义类型添加Nat Ip
- 应该为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的私有子网中
现在假设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
希望这有助于你!
以上是关于在VPC中访问RDS posgtgreSQL?的主要内容,如果未能解决你的问题,请参考以下文章
如果我们使用默认 VPC 和安全组将公开访问设置为“否”,为啥 EC2 实例无法访问 RDS 实例?