【发布时间】:2020-02-12 10:44:35
【问题描述】:
我目前在 S3 存储桶中有一个 .csv 文件,我想使用 Python 脚本将其附加到 Redshift 数据库中的表中。我有一个单独的文件解析器并上传到 S3,它工作得很好。
我用于连接/复制到表中的代码如下。我收到以下错误消息:
OperationalError:(psycopg2.OperationalError)无法连接到服务器:连接超时(0x0000274C/10060) 服务器是否在主机“redshift_cluster_name.unique_here.region.redshift.amazonaws.com”(18.221.51.45)上运行并接受 端口 5439 上的 TCP/IP 连接?
我可以确认以下几点:
端口是 5439
未加密
集群名称/数据库名称/用户名/密码均正确
可公开访问设置为“是”
我应该修复什么以确保我可以将 S3 中的文件连接到 Redshift?感谢大家提供的任何帮助。
我还查看了 Stack Overflow 和 ServerFault,但这些似乎要么是用于 MySQL 到 Redshift,要么是解决方案(如链接的 ServerFault CIDR 解决方案)不起作用。
感谢您的帮助!
DATABASE = "db"
USER = "user"
PASSWORD = "password"
HOST = "redshift_cluster_name.unique_here.region.redshift.amazonaws.com"
PORT = "5439"
SCHEMA = "public"
S3_FULL_PATH = 's3://bucket/file.csv'
#ARN_CREDENTIALS = 'arn:aws:iam::aws_id:role/myRedshiftRole'
REGION = 'region'
############ CONNECTING AND CREATING SESSIONS ############
connection_string = f"redshift+psycopg2://{USER}:{PASSWORD}@{HOST}:{PORT}/{DATABASE}"
engine = sa.create_engine(connection_string)
session = sessionmaker()
session.configure(bind=engine)
s = session()
SetPath = f"SET search_path TO {SCHEMA}"
s.execute(SetPath)
###########################################################
############ RUNNING COPY ############
copy_command = f
'''
copy category from '{S3_FULL_PATH}'
credentials 'aws_iam_role={ARN_CREDENTIALS}'
delimiter ',' region '{REGION}';
'''
s.execute(copy_command)
s.commit()
######################################
#################CLOSE SESSION################
s.close()
##############################################
【问题讨论】:
-
Redshift集群关联的安全组的配置是什么?您是从 Internet 连接,还是从 EC2 连接? Redshift 集群是否在公共子网中?
-
@JohnRotenstein 感谢您的回复!安全组仍设置为默认值 - 我创建了集群,目前是唯一一个访问它的人。我从互联网连接到它,而不是 EC2。我已通过this tutorial 将集群公开
-
安全组是否配置为允许端口 5439 从
0.0.0.0/0入站?超时表示客户端无法访问集群。其他需要检查的是集群是否在公共子网中。出于测试目的,您可能希望使用 DBVisualizer 之类的 SQL 客户端。您是否能够连接到同一 VPC 中的其他任何东西(例如 Amazon EC2 实例)?这将有助于排除任何网络问题。 -
我没有设置,没有。我现在可以通过 Python 脚本进行连接(还有其他单独的问题)。不过,这似乎导致了另一个错误——通过查询编辑器时,我现在无法在 Redshift 中看到我的数据库。尝试连接时,我收到以下消息:无法执行 HTTP 请求:连接到 18.221.51.45:1130 [/18.221.51.45] 失败:连接超时。这和刚刚做出的改变有关系吗?再次感谢您的帮助。
-
很可能。你做了什么改变?好像是在尝试使用 1130 端口,有点不正常。
标签: python amazon-web-services amazon-s3 amazon-redshift