Почему я получаю sqlalchemy.ex c .OperationalError при попытке подключиться к Google Cloud MySQL db из локальной облачной функции Google? - PullRequest
1 голос
/ 28 мая 2020

Вот суть моего приложения для облачной функции GCP:

main.py

import sqlalchemy
import logging
import os
from time import perf_counter

def main(data, context):
    log = logging.getLogger("course_gen")
    db = sqlalchemy.create_engine(
        sqlalchemy.engine.url.URL(
            drivername="mysql+pymysql",
            username=os.environ.get("DB_USER"),
            password=os.environ.get("DB_PASS"),
            host="**.***.**.***", # this is actually the public IP of my cloud mysql instance
            port=3306,
            database="table_name"
        ),
        pool_size=5,
        max_overflow=2,
        pool_timeout=30,
        pool_recycle=1800
    )
    with db.connect() as cursor:
        start_time = perf_counter()

if __name__ == '__main__':
    main('data', 'context')

, а вот соответствующий обзор моего облака MySQL, из которого я скопировал IP:

enter image description here

port kwarg был немного запутанным, но из того, что я сделал из сообщений вроде this , это всегда 3306.

В основном, когда я запускаю свою облачную функцию локально, я ожидаю, что она сможет подключиться к живому экземпляру GCP MySQL, который я подготовил, но полная ошибка Получаю:

sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on (timed out)")

1 Ответ

2 голосов
/ 28 мая 2020

Итак, я действительно понял это, когда проводил небольшое исследование - в основном мне пришлось следовать этому руководству:

https://cloud.google.com/sql/docs/mysql/quickstart-proxy-test#windows -64-бит

, чтобы настроить что-то вроде локального прокси на моей персональной машине

(выглядит так)

$ ./cloud_sql_proxy -instances=********:us-east1:********=tcp:3306
2020/05/27 22:36:06 Listening on 127.0.0.1:3306 for ********:us-east1:********
2020/05/27 22:36:06 Ready for new connections
2020/05/27 22:37:05 New connection for "********:us-east1:********"
2020/05/27 22:37:05 Client closed local connection on 127.0.0.1:3306

и установить хост на localhost или 127.0.0.1, который через Маги c прокси в конечном итоге попадают в реальный экземпляр облака MySQL. Вуаля, ошибок больше нет.

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