Я пытаюсь подключиться к CloudSQL с помощью конвейера Python.
Актуальная ситуация
Функция подключения
def cloudSQL(input):
import pymysql
connection = pymysql.connect(host='<server ip>',
user='...',
password='...',
db='...')
cursor = connection.cursor()
cursor.execute("select ...")
connection.close()
result = cursor.fetchone()
if not (result is None):
yield input
Ошибка
Это сообщение об ошибке при использовании DataflowRunner
OperationalError: (2003, "Can't connect to MySQL server on '<server ip>' (timed out)")
CloudSQL
У меня есть publicIP (для тестирования с локального с помощью directrunner), и я также пытался активировать частный IP, чтобы узнать, может ли это быть проблемой для подключения к DataflowRunner
Вариант 2
Я также пробовал с
connection = pymysql.connect((unix_socket='/cloudsql/' + <INSTANCE_CONNECTION_NAME>,
user='...',
password='...',
db='...')
С ошибкой:
OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 2] No such file or directory)")
Взгляните на Прокси-сервер Cloud SQL. Он создаст локальную точку входа (сокет Unix или порт TCP в зависимости от того, что вы настроите), которая будет прокси-сервером и аутентифицировать соединения с вашим экземпляром Cloud SQL.
Прокси-сервер - это внешний процесс, который вы запускаете рядом со своим приложением.
Вам нужно будет имитировать реализацию JdbcIO.read () в Python, как описано в этом StackOverflow ответ
С этим решение я смог получить доступ к CloudSQL.
Для тестирования вы можете добавить 0.0.0.0/0 в CloudSQL publicIP без использования сертификатов.
Я создал пример с использованием Cloud SQL Proxy внутри контейнера Workflow worker, подключение из конвейера Python с использованием сокетов Unix без необходимости SSL или IP-авторизации.
Таким образом, конвейер может подключаться к нескольким экземплярам Cloud SQL.
https://github.com/jccatrinck/dataflow-cloud-sql-python
Есть снимок экрана, показывающий вывод журнала, на котором в качестве примера показаны таблицы базы данных.
Вы знаете, возможно ли это с помощью файла setup.py? если возможно, знаете ли вы какой-нибудь пример, чтобы увидеть код?