如何从我的Amazon EC2实例

时间:2017-09-11 18:47:46

标签: python amazon-web-services amazon-ec2 amazon-redshift psycopg2

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

2 个答案:

答案 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和区域检查

检查-

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

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

如果以上条件均成立,则-

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

  • 此后,通过登录ec2并运行-

  • 来验证您的工作
  

telnet

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