隧道连接到Redshift集群

4

我是redshift的新手。目前,我已经能够创建一个redshift集群,通过SQL Workbench进行连接,但是我希望通过从我的MAC终端执行ssh来隧道化我的redshift集群。我进行了一些研究,并能够创建具有相同VPC ID和子网组的ec2实例,这与我用于创建Redshift集群的相同。我已经在我的ec2实例上安装了psql。但是当我使用psql命令连接到redshift时,我无法理解我哪里出错了:

psql -h my redshift endpoint -p 5439 -d database name -U user -c " my query "

我收到了错误信息:psql:无法将主机名“my redshift endpoint”翻译成地址:名称或服务未知。


请展示您用于隧道连接到EC2实例的命令。它应该涉及使用ssh -L将远程端口转发到本地端口。 - John Rotenstein
是的,我正在使用这里的命令:"ssh -I "test.pem" -L 5439:redshiftendpoint:5439 ec2-user@ec2instance.compute.amazonaws.com"。 - Saurabh Singh
3个回答

5

第一步是使用 ssh 命令,建立到 EC2 实例的隧道,并将本地端口转发到远程端口:

ssh -i KEYPAIR.pem -L 5439:REDSHIFT-ENDPOINT:5439 ec2-user@EC2-PUBLIC-IP

说明:

  • KEYPAIR.pem 是访问 EC2 实例所使用的密钥对名称。
  • REDSHIFT-ENDPOINT 是 Redshift 端点的 DNS 名称。
  • EC2-PUBLIC-IP 是 EC2 实例的 IP 地址。

该命令表示:

  • 使用密钥对创建 ssh 连接。
  • 将发送到本地端口 5439 的任何流量转发到远程机器,然后由远程机器将该流量发送到 REDSHIFT-ENDPOINT:5439(请将您的端点替换为 REDSHIFT-ENDPOINT)。

然后,你可以像在自己的计算机上运行一样,在 localhost:5439 上连接到 Redshift。该流量将被发送到远程机器,然后发送到 REDSHIFT-ENDPOINT:5439

例如,如果你想使用 psql 连接到 Redshift,请使用以下命令:

psql -h localhost -p 5439 -U <username>

我需要在psql或ec2实例中更改任何设置吗?因为我仍然遇到了您建议的相同问题。谢谢。 - Saurabh Singh
请描述每个步骤执行时会发生什么,包括响应需要多长时间。例如,当您运行ssh时,它可能会出现挂起的情况。这没关系!然后,您应该使用单独的终端会话来运行psql。除非您提供更多有关正在发生的情况的信息,否则我无法帮助您。 - John Rotenstein

0
尝试使用psql -h localhost -p 5439 -d -U -c " my query "psql -p 5439 -d -U -c " my query ",如果您不使用它,则默认情况下为localhost,则无法使用开关-h而不带参数。

抱歉,我没有看到我忘记提到我正在使用我的Redshift端点在“-h”之后。 - Saurabh Singh

0

感谢John Rotenstein给了我启示,我实际上缺少与我的安全组相关联的入站规则,以仅允许来自redshift私有IP的流量。我的ec2实例和redshift都在同一个VPC中,因此应该使用私有IP而不是公共IP。我还忘记将redshift的ssh公钥放入ec2授权密钥文件中。一旦我做到了,它就可以工作了。


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