繁体   English   中英

如何从我的Amazon EC2实例中连接到Amazon Redshift集群

[英]How to connect to Amazon redshift cluster from within my Amazon EC2 instance

我的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集群吗? 谢谢!

是网络组还是安全组

设置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

该问题与附加到Redshift群集的安全组有关。 我本人已经遇到了这个问题,所以我希望您遵循以下步骤-

VPC和区域检查

检查-

  1. VPC-如果您的EC2与Redshift群集位于同一VPC

  2. 帐户区域-确保区域也相同。

如果以上标准为真,则-

  • 检查您的EC2的私有IP是否已在连接到redshift集群的安全组中列入白名单。 (我通常不使用公共IP创建实例,而是通过堡垒主机登录以获得更好的安全性和便捷性,因为我必须处理很多EC2)
  • 您可以参考此AWS文档执行上述操作:- 授权对群集的访问

  • 之后,登录ec2并运行-

远程登录<redshift_cluster_endpoint> <redshift_cluster_port>

除上述内容外,您还可以在从本地计算机上运行代码时连接到Redshift,因为您的公共IP(家庭/工作地点)必须已在Redshift的附加安全组中列入了白名单。 因此,将EC2视为需要白名单(IP)的云上类似机器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM