如何使用psql连接到RDS Postgres实例

4

我对RDS是全新的,通常只通过Rails和/或Heroku使用Postgres,因此并不深入了解数据库管理。我所要做的就是验证我是否可以连接到我在AWS上刚创建的RDS实例,但它一直挂起,psql报告了大约30秒或几分钟后的情况:

$ psql postgresql://myuser:mypass@myawshost.rds.amazonaws.com:5432/my-db-name
psql: error: could not connect to server: Operation timed out
  Is the server running on host "myawshost.rds.amazonaws.com" (<the ip address>) and accepting
  TCP/IP connections on port 5432?

如何从本地主机连接到我的AWS RDS实例?

  • 我确定我有正确的用户名和密码。
  • 我确定主机地址是正确的。
  • 我不确定是否应该包括端口号。
  • 我不确定是否应该输入数据库名称,因为在我的数据库的RDS管理控制台的“配置”选项卡下,它说DB instance ID:my-db-name,Engine version:13.3,DB name:-,我不确定那个-是我的实际Postgres数据库名称还是my-db-name

我尝试了带着数据库名称,但仍然无法连接:

$ psql postgresql://myuser:mypass@myawshost.rds.amazonaws.com:5432/-
  • 我编辑了安全组,它链接在https://console.aws.amazon.com/rds/home连接和安全 选项卡下的 VPC安全组 部分,以允许所有入站连接。我也尝试将其限制为仅支持我的IP地址作为入站连接。

任何帮助都将不胜感激,谢谢。不确定为什么它会一直挂起。我已经成功使用本地版本的postgres,但连接到postgres RDS失败。

连接和安全 > 安全 部分下面,我刚刚注意到它说 公共可访问性:否。我还需要启用其他功能吗?还有一个VPC、一个子网组和几个子网,我对此并不太了解,我需要在那里进行操作吗?

最后,“状态”显示绿色的 Available,所以看起来情况很好。


你是从哪里连接的?来自EC2实例还是来自AWS之外? - Marcin
从 AWS 外部,可以像这里描述的那样使用 DATABASE_URL 进行操作。 - Lance
“Public accessibility” 必须为是。另外,您的安全组是什么? - Marcin
安全组允许来自任何IP的所有入站流量,应该怎么做?(我将从托管在Vercel上的Next.js应用程序连接到它)。看起来答案在这里回答了(https://vercel.com/docs/solutions/databases)。 - Lance
1个回答

2
我在AWS知识中心找到了一个有用的链接,希望这能帮到你。另外,如果你的RDS部署在公共子网中,是的,如果你想通过互联网访问RDS,你需要启用它。
我的DB实例位于公共子网中,但我无法从本地计算机通过互联网连接它。当DB实例的Publicly Accessible属性设置为No时,可能会出现此问题。要检查DB实例是否公开可访问,可以使用Amazon RDS控制台或AWS CLI。
要将Amazon RDS实例的Publicly Accessible属性更改为Yes,请执行以下操作:
  1. 验证您的VPC已附加到Internet网关。确保安全组的入站规则允许连接。
  2. 打开Amazon RDS控制台。
  3. 从导航窗格选择“数据库”,然后选择DB实例。
  4. 选择“修改”。
  5. 在“连接”下,扩展“其他配置”部分,然后选择“Publicly accessible”。
  6. 选择“继续”。
  7. 选择“修改DB实例”。
注意:您不需要选择“立即应用”。有关“立即应用”如何影响停机时间的更多信息,请参阅使用“立即应用”参数。

https://aws.amazon.com/premiumsupport/knowledge-center/rds-connectivity-instance-subnet-vpc/


好的,非常好,这看起来就是它了。谢谢你。似乎需要几分钟才能传播。当从像Node.js或Next.js应用程序这样的Web应用程序连接时,这是设置数据库的正确方式吗?(连接到公共可访问的RDS实例)。还是有更好的做法? - Lance
现在我得到了 psql: error: FATAL: database "-" does not exist,我的数据库名是什么,我该如何更改它?看起来它叫做 postgres... 没有任何地方指定... 我可以/应该更改吗?我可以在一个 RDS 实例中拥有多个 "dbs" 吗? - Lance
2
我不建议通过互联网访问数据库。您必须在私有子网中部署RDS。如果您的应用程序(假设它在EC2上运行)可以通过服务链接角色连接到数据库。https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/UsingWithRDS.IAM.ServiceLinkedRoles.html如果您仍然想从数据库运行一些查询,请考虑使用Bastian主机并通过其连接到数据库。https://aws.amazon.com/quickstart/architecture/linux-bastion/ - Amith Jayasekara
1
是的,您可以在RDS上拥有多个数据库40个MySQL、MariaDB或PostgreSQL。 - Amith Jayasekara

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接