无法通过 RDS 代理连接到 RDS PostgreSQL 数据库实例

Can't connect to RDS PostgreSQL DB instance through an RDS proxy

我正在尝试使用 RDS 代理来汇集和共享与带有 PostgreSQL 引擎的 RDS 数据库建立的连接。问题是我可以通过 ECS 实例或在 PgAdmin 中打开与数据库的连接,但是,我无法通过代理进行连接。为了尝试通过 PgAdmin 中的代理建立连接,我使用的是代理端点而不是数据库端点,但连接尝试超时。

我已成功创建代理并与我的数据库关联,代理和数据库状态均可用。我遵循了 example proxy setup 并且数据库和代理使用相同的 VPC 安全组。

有什么想法吗?

在我看来,您正在从 AWS 外部连接到代理。如果是这样的话,那就not possible直接做吧:

Your RDS Proxy must be in the same VPC as the database. The proxy can't be publicly accessible, although the database can be.

您可以连接到 RDS,因为它可以公开访问。另一方面,RDS 代理只能从同一 VPC 内访问,例如从一个实例访问。

因此,解决方案是在与您的 RDS 和代理相同的 VPC 中设置一个实例。该实例必须可以使用 SSH 访问。

在实例上,您可以运行 pgadmin4,在docker:

docker run --rm -p 8080:80 \
    -e 'PGADMIN_DEFAULT_EMAIL=user@domain.com' \
    -e 'PGADMIN_DEFAULT_PASSWORD=Fz77T8clJqJ4XQrQunGA' \
    -d dpage/pgadmin4

该命令在设置 docker 后,将在实例的端口 8080 上 pgadmin4 服务器。

您可以检查实例是否正常工作:

curl localhost:8080

可以给出以下指示其工作:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>Redirecting...</title>
<h1>Redirecting...</h1>
<p>You should be redirected automatically to target URL: <a href="/login?next=%2F">/login?next=%2F</a>.  If not click the link

但是,由于您的实例只能通过 ssh(端口 22)访问,要从本地工作站访问它,您必须建立 ssh 隧道:

ssh  -i <private-key>  -L   8080:localhost:8080 -N ubuntu@<public-instance-ip> -v

在上面,我的实例是 Ubuntu。对于亚马逊 Linux 2,用户将是 ec2-user.

隧道会将端口 8080 从实例(即 pgadmin4)转发到端口 8080 上的本地工作站。

然后您只需将浏览器指向 localhost:8080,您应该会看到 pgadmin4 欢迎屏幕。

P.S. 我用于验证的 RDS 和代理设置: