【问题标题】:How to connect to Amazon redshift cluster from within my Amazon EC2 instance如何从我的 Amazon EC2 实例中连接到 Amazon Redshift 集群
【发布时间】: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 安全组。

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


【解决方案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 和区域检查

检查 -

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

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

如果上述条件为真,那么 -

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

  • 在此之后,通过登录到您的 ec2 并运行来验证您的工作 -

telnet

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

【讨论】:

    猜你喜欢
    • 2019-04-03
    • 2015-10-21
    • 2017-11-04
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2018-11-28
    相关资源
    最近更新 更多