我的AWS账户中有一个Redshift Cluster。我能够在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群集的问题吗?谢谢!
答案 0 :(得分:0)
它是网络或安全组
配置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
答案 1 :(得分:0)
问题与Redshift群集上的安全组有关。 我本人已经遇到了这个问题,所以我希望您遵循以下步骤-
检查-
VPC-如果您的EC2与Redshift群集位于同一VPC
帐户区域-确保区域也相同。
如果以上条件均成立,则-
您可以参考此AWS文档执行上述操作:-Authorize Access To Cluster
此后,通过登录ec2并运行-
telnet
除上述内容外, 您可以从计算机本地运行代码时连接到Redshift,因为您的公共IP(家庭/工作地点)必须已在Redshift的附加安全组中列入白名单。因此,将EC2视为需要白名单(IP)的云上类似机器。