Подключение к Cloud SQL из Google Cloud Function с использованием Python и SQLAlchemy - PullRequest
0 голосов
/ 14 февраля 2019

Я прочитал всю документацию , связанную с подключением к MysQL, размещенному в Cloud SQL из GCF, и все еще не могу подключиться.Кроме того, перепробовал все подсказки в документации SQLAlchemy, связанной с этим .Я использую следующее соединение

con = 'mysql+pymysql://USER:PASSWORD@/MY_DB?unix_socket=/cloudsql/Proj_ID:Zone:MySQL_Instance_ID'
mysqlEngine = sqlalchemy.create_engine(con)

Я получил ошибку:

(pymysql.err.OperationalError) (2003, «Не удается подключиться к серверу MySQL на»localhost '([Errno 111] Соединение отказано) ") (Справочная информация об этой ошибке: http://sqlalche.me/e/e3q8)

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

Вы должны убедиться, что используете правильный /cloudsql/<INSTANCE_CONNECTION_NAME> (в формате <PROJECT_ID>:<REGION>:<INSTANCE_ID>).Это должно быть все, что нужно, если ваш экземпляр Cloud SQL находится в том же проекте и регионе, что и ваша функция.

Документация GCF также настоятельно рекомендует ограничить пул одним соединением.Это означает, что вы должны установить и pool_size=1, и max_overflow=0 в настройках вашего двигателя.

Если вы хотите увидеть пример того, как установить эти настройки, посмотрите этот пример приложения на Github .

0 голосов
/ 01 апреля 2019

После долгих обсуждений со службой поддержки Google мы нашли причину: просто мы должны включить публичный доступ к Cloud SQL без каких-либо правил брандмауэра.Это недокументированное и может свести вас с ума, но серебряная пуля для команды поддержки означает: это бета-версия!

0 голосов
/ 14 февраля 2019

Я полагаю, что ваша проблема с Connection_name, представленным <PROJECT_ID>:<REGION>:<INSTANCE_ID> в конце строковой переменной con.

Что, кстати, следует заключить в кавычки:

con = 'mysql+pymysql://USER:PASSWORD@/MY_DB?unix_socket=/cloudsql/<PROJECT_ID>:<REGION>:<INSTANCE_ID>'

Проверьте, правильно ли вы пишете с помощью этой команды:

gcloud sql instances describe <INSTANCE_ID> | grep connectionName

Если это не так, имейте в виду эти соображения присутствуют в официальной документации Cloud Functions :

Экземпляры MySQL первого поколения должны находиться в одном регионекак ваша облачная функция.Экземпляры MySQL второго поколения, а также экземпляры PostgreSQL работают с облачными функциями в любом регионе.

Ваша облачная функция имеет доступ ко всем экземплярам Cloud SQL в вашем проекте.Вы можете получить доступ к экземплярам MySQL второго поколения, а также к экземплярам PostgreSQL в других проектах, если учетная запись службы облачной функции (перечисленная на вкладке «Общие» в облачной функции в консоли GCP) добавлена ​​в качестве члена в IAM в проекте с экземпляром Cloud SQL (s) с ролью Cloud SQL Client.

...