Redshift не подключается к хосту через скрипт Python - PullRequest
0 голосов
/ 15 октября 2019

В настоящее время у меня есть файл .csv в корзине S3, который я хотел бы добавить к таблице в базе данных Redshift, используя скрипт Python. У меня есть отдельный анализатор файлов и загрузка на S3, которая отлично работает.

Код, который у меня есть для подключения / копирования в таблицу, приведен ниже. Я получаю следующее сообщение об ошибке:

OperationalError: (psycopg2.OperationalError) не удалось подключиться к серверу: Тайм-аут подключения (0x0000274C / 10060) Сервер работает на хосте "redshift_cluster_name.unique_here.region. redshift.amazonaws.com "(18.221.51.45) и принимая соединения TCP / IP через порт 5439?

Я могу подтвердить следующее:

  • Порт5439

  • Не зашифровано

  • Правильно указаны имя кластера / имя БД / имя пользователя / пароль

  • Публично доступное значение «Да»

Что я должен исправить, чтобы убедиться, что я могу подключить свой файл в S3 к Redshift? Спасибо всем за любую помощь, которую вы можете предоставить.

Также я посмотрел вокруг на Переполнение стека и 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()
##############################################

1 Ответ

1 голос
/ 17 октября 2019

Для подключения через программу Python потребуется то же подключение, что и для подключения к клиенту SQL.

Я создал новый кластер, чтобы можно было задокументировать процесс для вас.

Вот шаги, которые япотребовалось:

  • Создан VPC с CIDR 10.0.0.0/16. Мне действительно не нужно создавать другой VPC, но я хочу избежать каких-либо проблем с предыдущими конфигурациями.
  • Создание подсети в VPC с CIDR 10.0.0.0/24.
  • Создал Интернет-шлюз и подключил его к VPC.
  • Отредактировал Таблицу маршрутов по умолчанию для отправки 0.0.0.0/0 трафика на Интернет-шлюз. (Я только создаю общедоступную подсеть, поэтому мне не нужна таблица маршрутов для частной подсети.)
  • Создана группа подсетей Redshift Cluster с единственной подсетью, которую я создал.
  • Запустите 1-узловый кластер Redshift в группу подсетей кластеров. Publicly accessible = Yes, группа безопасности по умолчанию.
  • Вернулся на консоль VPC для редактирования группы безопасности по умолчанию . Добавлено правило входящих для Redshift from Anywhere.
  • Ожидание готовности кластера.
  • Затем я использовал DbVisualizer для входа в базу данных. Успех!

Вышеуказанные шаги сделали общедоступный кластер Redshift, и я подключился к нему со своего компьютера в Интернете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...