5

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

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

有任何想法吗?

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

15

在我看来,您是从AWS 外部连接到代理。如果是这种情况,则无法直接执行此操作:

您的 RDS 代理必须与数据库位于同一 VPC 中。代理不能公开访问,尽管数据库可以。

您可以连接到 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 后,将pgadmin4在实例的 8080 端口上提供服务。

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

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。对于 Amazon Linux 2,用户将是ec2-user.

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

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

PS我的 RDS 和用于验证的代理设置:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

于 2020-08-10T13:18:19.360 回答