隧道到红移集群
Posted
技术标签:
【中文标题】隧道到红移集群【英文标题】:Tunneling to redshift cluster 【发布时间】:2019-04-22 00:14:35 【问题描述】:我是红移新手。目前,我能够创建一个 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: could not translate host name "my redshift endpoint" to address: Name or service not known
【问题讨论】:
请显示您用于隧道到 EC2 实例的命令。它应该涉及使用ssh -L
将远程端口转发到本地端口。
是的,我在这里使用的是命令 "ssh -I "test.pem" -L 5439:redshiftendpoint:5439 ec2-user@ec2instance.compute.amazonaws.com"
【参考方案1】:
第一步是使用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 实例中的任何设置。因为我仍然对你的建议有同样的问题。谢谢。 请描述执行每个步骤时会发生什么,包括响应需要多长时间。例如,当您运行ssh
时,它可能会出现挂起。这没关系!然后,您应该为psql
使用单独的终端会话。除非您提供有关正在发生的事情的更多信息,否则我无法为您提供帮助。【参考方案2】:
试试psql -h localhost -p 5439 -d -U -c " my query "
或者psql -p 5439 -d -U -c " my query "
,不带参数不能用switch-h
,不用的话默认是localhost
【讨论】:
对不起,我没看到我忘了提到我在“-h”之后使用我的红移端点【参考方案3】:感谢 John Rotenstein 给予我见解,我实际上错过了与我的安全组关联的入站规则,只允许来自 redshift 私有 IP 的流量。我的 ec2 实例和 redshift 都在同一个 VPC 中,因此应该使用私有 IP 而不是公共 IP。也忘了把redshift的ssh公钥放到ec2的authorized_key文件中。一旦我这样做了,它就起作用了。
【讨论】:
以上是关于隧道到红移集群的主要内容,如果未能解决你的问题,请参考以下文章