【问题标题】:How to connect to RDS Postgres instance with psql如何使用 psql 连接到 RDS Postgres 实例
【发布时间】:2021-08-11 02:47:32
【问题描述】:

我是 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?

如何从 localhost 连接到我的 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/homeConnectivity &amp; security 选项卡的VPC security groups 部分下链接的安全组,因此它允许所有传入连接。我还尝试将我的 IP 地址限制为传入连接。

任何帮助将不胜感激,谢谢。不知道为什么它会挂起来。我使用本地版本的 postgres 很好,但是连接到 postgres RDS 不起作用。

Connectivity and Security &gt; Security 部分下,我注意到它写着Public accessibility: No。我必须启用其他功能吗?还有一个VPC,一个子网组,几个子网,我不太了解,要不要在那里做点什么?

最后,“状态”表示Available 亮起绿灯,所以那里的情况似乎很好。

【问题讨论】:

  • 您从哪里连接? Ec2 实例还是来自 AWS 外部?
  • 来自 AWS 外部,如 hereDATABASE_URL 所述。
  • Public accessibility 必须为“是”。还有你的安全组是什么?
  • 安全组允许来自任何 IP 的所有入站流量,它们应该是什么? (我将从Vercel 上托管的 Next.js 应用程序连接到此)。看起来它已经回答了here

标签: postgresql amazon-web-services amazon-rds psql


【解决方案1】:

我在 AWS 知识中心找到了一个有用的链接,希望对您有所帮助。 顺便说一句,如果您的 RDS 部署在公共子网中,是的,如果您想通过 Internet 访问 RDS,则需要启用。

我的数据库实例位于公共子网中,我无法从本地计算机通过 Internet 连接到它 当数据库实例的 Publicly Accessible 属性设置为 No 时,可能会出现此问题。要检查数据库实例是否可公开访问,您可以使用 Amazon RDS 控制台或 AWS CLI。

将 Amazon RDS 实例的 Publicly Accessible 属性更改为 Yes:

  1. 验证您的 VPC 是否连接了互联网网关。确保安全组的入站规则允许连接。

  2. 打开 Amazon RDS 控制台。

  3. 从导航窗格中选择数据库,然后选择数据库实例。

  4. 选择修改。

  5. 在连接下,扩展附加配置部分,然后选择公开访问。

  6. 选择继续。

  7. 选择修改数据库实例。

注意:您无需选择立即应用。有关立即应用如何影响停机时间的更多信息,请参阅使用立即应用参数。

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

【讨论】:

  • 好的,看起来像这样。谢谢你。传播似乎需要几分钟。从 Node.js 或 Next.js 应用程序等 Web 应用程序连接时,您应该如何设置数据库? (连接到可公开访问的 RDS 实例)。还是有更好的做法?
  • 现在我收到psql: error: FATAL: database "-" does not exist,我的数据库名称是什么,如何更改?看起来它被称为postgres...没有指定的地方...我可以/应该改变它吗?每个 RDS 实例可以有多个“db”吗?
  • 我不建议通过互联网访问数据库。您必须在私有子网中部署您的 RDS。如果您的应用程序(假设它在 ec2 上运行)可以通过服务链接角色连接到数据库。 docs.aws.amazon.com/AmazonRDS/latest/UserGuide/… 如果您仍想从数据库运行一些查询,请考虑使用 Bastian 主机并通过它连接到数据库。 aws.amazon.com/quickstart/architecture/linux-bastion
  • 是的,您可以使用 RDS 40 for MySQL、MariaDB 或 PostgreSQL 拥有多个数据库
猜你喜欢
  • 1970-01-01
  • 2015-12-25
  • 2021-11-01
  • 1970-01-01
  • 2016-04-13
  • 1970-01-01
  • 2019-04-03
  • 2019-03-23
  • 1970-01-01
相关资源
最近更新 更多