如何从我的 Amazon EC2 实例中连接到 Amazon Redshift 集群
Posted
技术标签:
【中文标题】如何从我的 Amazon EC2 实例中连接到 Amazon Redshift 集群【英文标题】:How to connect to Amazon redshift cluster from within my Amazon EC2 instance 【发布时间】:2017-09-11 18:47:46 【问题描述】:我的 AWS 账户中有一个 Redshift 集群。我可以在 python 中连接到它,当我在本地运行脚本时,它运行得非常好:
import psycopg2
con = psycopg2.connect(dbname='some_dbname', host='hostname.us-east-2.redshift.amazonaws.com', port='port#', user='username', password='password')
cursor=con.cursor()
query = "select * from table;"
cursor.execute(query)
data = np.array(cursor.fetchall())
cursor.close()
con.commit()
con.close()
但是,当我将上述脚本复制到我的 EC2 实例 (Amazon Linux AMI),然后尝试运行它时,我收到以下错误:
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not connect to server: Connection timed out
Is the server running on host "hostname.us-east-2.redshift.amazonaws.com" and accepting
TCP/IP connections on port port#?
谁能帮助我了解如何从我的 EC2 实例连接到我的 Redshift 集群?谢谢!
【问题讨论】:
您是否打开了分配给 Redshift 集群的安全组中的端口以允许来自 EC2 实例的连接? @MarkB 不,我该怎么做? 您是如何打开安全组以允许从本地计算机访问的?这是相同的过程。 集群和 EC2 实例都在同一个 VPC ID 下。但它仍然没有连接并且正在超时。 不,只是 Redshift 安全组。 【参考方案1】:是网络或安全组
当您预置 Amazon Redshift 集群时,它默认处于锁定状态,因此没有人可以访问它。要授予其他用户对 Amazon Redshift 集群的入站访问权限,请将集群与安全组相关联。
见http://docs.aws.amazon.com/redshift/latest/mgmt/working-with-security-groups.html
如果 EC2 与 Redshift 集群在同一个 VPC 中,您应该可以进行联网。如果没有,请查看本指南 http://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html
【讨论】:
所以当我转到我的 EC2 实例时,在 Description 选项卡下,我单击 Security Groups,我看到它的 VPC ID 与 Redshift 集群的 VPC ID 相同,都是他们的 Group不过身份证不一样。但我仍然无法连接,并且超时。抱歉,对此很陌生。【参考方案2】:该问题与附加到 Redshift 集群的安全组有关。 我自己也遇到过这个问题,所以我希望您按照以下步骤操作 -
VPC 和区域检查
检查 -
VPC-如果您的 EC2 与 Redshift 集群位于同一 VPC 中
帐户区域 - 确保区域也相同。
如果上述条件为真,那么 -
检查您的 EC2 的私有 IP 是否在连接到 redshift 集群的安全组中列入白名单。 (我通常不使用公共 IP 创建实例,而是通过堡垒主机登录以获得更好的安全性和易用性,因为我必须处理大量 EC2)您可以参考此 AWS 文档来执行上述操作:- Authorize Access To Cluster
在此之后,通过登录到您的 ec2 并运行来验证您的工作 -
如果您看到以下 [连接成功] - Connection Successful To Redshift Snapshot 这意味着您可以通过您的 ec2 实例连接到 redshift。telnet
除上述之外, 您可以在从您的机器本地运行代码时连接到 Redshift,因为您的公共 IP(家庭/工作场所)必须已在 Redshift 附加的安全组中列入白名单。因此,将 EC2 视为需要白名单(IP)的云上类似机器。
【讨论】:
以上是关于如何从我的 Amazon EC2 实例中连接到 Amazon Redshift 集群的主要内容,如果未能解决你的问题,请参考以下文章
无法从我的ubuntu EC2计算机连接到AWS DocumentDB
如何从我的 Mac 连接到新的 Amazon Lightsail 实例?
如何从我的 springboot 应用程序的 Docker 映像连接到 Amazon RDS 实例?