RedShift未通过Python脚本连接到主机

问题描述

我目前在S3存储桶中有一个.csv文件,我想使用Python脚本将其附加到RedShift数据库中的表中。我有一个单独的文件解析器并上传到S3,工作正常。

我拥有的用于连接/复制到表中的代码如下所示。我收到以下错误消息:

OperationalError:(ological copg2.OperationalError)无法连接到服务器:连接超时(0x0000274C/10060) 服务器是否在主机"redshift_cluster_name.unique_here.region.redshift.amazonaws.com"(18.221.51.45)上运行并接受 端口5439上的TCP/IP连接?

我可以确认以下几点:

  • 端口为5439

  • 未加密

  • 群集名称/数据库名称/用户名/密码均正确

  • 可公开访问设置为"是"

我应该修复什么以确保我可以将S3中的文件连接到RedShift?感谢所有您能提供的帮助。

我还查看了堆栈溢出和ServerFault,但这些似乎要么是针对MySQL的RedShift,要么是解决方案(如链接的ServerFaultCIDR解决方案)不起作用。

感谢您的帮助!

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()
##############################################

解决方案

通过Python程序连接需要与从SQL客户端连接相同的连接。

我创建了一个新群集,以便可以为您记录该过程。

以下是我采取的步骤:

  • 创建了CIDR为10.0.0.0/16的私有网络。我并不需要再创建一个私有网络,但是我希望避免之前的配置出现问题。
  • 在私有网络中创建了CIDR为10.0.0.0/24的子网。
  • 创建网关并附加到私有网络。
  • 已编辑默认路由表以将0.0.0.0/0流量发送到Internet网关。(我只创建公有子网,私有子网不需要路由表。)
  • 使用我创建的单个子网创建了红移群集子网组。
  • 将单节点红移群集启动到群集子网组。Publicly accessible = Yes,默认安全组。
  • 返回私有网络控制台编辑默认安全组。添加了从任何位置进行红移的入站规则。
  • 等待群集准备就绪。
  • 然后我使用DbVisualizer登录到数据库。成功!

以上步骤创建了一个公开可用的RedShift群集,我已从Internet上的计算机连接到该群集。

相关文章