如何从我的 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 并运行来验证您的工作 -

telnet

如果您看到以下 [连接成功] - Connection Successful To Redshift Snapshot 这意味着您可以通过您的 ec2 实例连接到 redshift。

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

【讨论】:

以上是关于如何从我的 Amazon EC2 实例中连接到 Amazon Redshift 集群的主要内容,如果未能解决你的问题,请参考以下文章

无法从我的ubuntu EC2计算机连接到AWS DocumentDB

如何从我的 Mac 连接到新的 Amazon Lightsail 实例?

如何从我的 springboot 应用程序的 Docker 映像连接到 Amazon RDS 实例?

您可以连接到亚马逊以外的 Amazon ElastiСache Redis 吗?

如何从我的 EBS 支持的 EC2 实例创建 AMI?

从远程服务器连接到 Amazon EC2 上的 mysql