Подключите Cloud SQL для MySql из Cloud Run

Я пытаюсь подключиться к Google Cloud SQL для MySql через Google Cloud Run. Я прочитал много сообщений в SO, а также документацию Google. Но, похоже, у меня это не работает. Я признаю, что я никогда не помещал приложения в контейнеры и в основном занимаюсь данными.

Примечание. У меня уже есть экземпляр Cloud SQL, к которому я могу подключиться через Cloud Shell.

1) Мой код основан на документации Google по адресу

https://cloud.google.com/sql/docs/mysql/connect-run

и код github в

https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/cloud-sql/mysql/sqlalchemy/main.py.

2) Создайте образ

gcloud builds submit --tag gcr.io/my-project/my-test-image

3) Разверните образ

gcloud run deploy --image gcr.io/my-project/my-test-image

4) Когда я пытаюсь вызвать службу в Cloud Shell, используя следующее, я получаю сообщение «Служба недоступна».

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" https://my-service.run.app

Может ли кто-нибудь помочь мне решить эту проблему?

Изменения - я не указал имя экземпляра mysql. Я исправил это и теперь получаю ошибку, как показано ниже -

[ИНФОРМАЦИЯ] Слушает: http://0.0.0.0:8080 (1) "

"Traceback (последний вызов последним): файл" /usr/local/lib/python3.8/site-packages/pymysql/connections.py ", строка 571, в соединении sock.connect (self.unix_socket) FileNotFoundError: [Errno 2] Нет такого файла или каталога "

Я не понимаю, почему он слушает 0.0.0.0:8080. Я удалил хост и порт из своего кода, но до сих пор получаю эту «информацию» и получаю ошибку «FileNotFoundError». Я не уверен, какой файл ему нужен. Нужен ли какой-то файл подключений? Если да, то какой у файла формат?


person sopana    schedule 03.03.2020    source источник
comment
Я не нахожу хост и порт в вашем коде. А в чем проблема? Прослушивание 0.0.0.0?   -  person guillaume blaquiere    schedule 03.03.2020
comment
Убедитесь, что вы правильно указали все необходимые параметры, указанные в образце кода. Я предполагаю, что, возможно, вы неправильно указываете CLOUD_SQL_CONNECTION_NAME в последней части sqlalchemy.create_engine.   -  person Waelmas    schedule 03.03.2020
comment
Привет, Ваэльмас, да, я исправил это - cloud_sql_connection_name = os.environ.get (CLOUD_SQL_CONNECTION_NAME, mysql-instance-name), но я все еще получаю ошибку как - Traceback (последний вызов последний): File / usr / local / lib / python3 .8 / site-packages / pymysql / connections.py, строка 571, в соединении sock.connect (self.unix_socket) FileNotFoundError: [Errno 2] Нет такого файла или каталога   -  person sopana    schedule 03.03.2020
comment
Привет, Гийом, я тоже добавил в код публичный IP-адрес своего экземпляра MySql, но это тоже не сработало. Даже тогда я получал сообщение об ошибке - [INFO] Прослушивание: 0.0.0.0:8080 (1). Поэтому я не был уверен, почему он показывает 0.0.0.0 вместо публичного IP, который я указал в коде.   -  person sopana    schedule 03.03.2020
comment
Я думаю, что waelmas @ пытался указать, что вы присваиваете имя экземпляра имени соединения, т.е. если у вас есть экземпляр с именем cloudsqlinstance в проекте с именем mylittleproject в зоне us-central 1 имя подключения экземпляра yout будет mylittleproject: us -central1: cloudsqlinstance, а не только cloudsqlinstance (вы можете найти имя подключения в консоли). Также важно предоставить права cloudsql.instances.connect для учетной записи службы в IAM.   -  person Chris32    schedule 03.03.2020
comment
Вам не хватает параметра команды развертывания --add-cloudsql-instance INSTANCE-CONNECTION-NAME. cloud.google.com/sql/docs/mysql/connect-run Ваш контейнер использует сокеты Unix, что означает, что вам необходимо настроить дополнительный компонент Cloud SQL Proxy, в противном случае настройте подключение для IP-адресации.   -  person John Hanley    schedule 03.03.2020
comment
Спасибо, Chris32 и Waelmas! Я исправил имя экземпляра облачного sql, и это сработало!   -  person sopana    schedule 04.03.2020


Ответы (1)


Я написал руководство о том, как подключить Cloud SQL (MySql) из Cloud Run (Java), но процесс такой же. ссылка

Убедитесь, что вы понимаете пункт 13, где вы должны передать имя подключения экземпляра с флагом --add-cloudsql-instances, это запустит облачный sql proxi для вас.

13. Настройте службу для использования с Cloud Run.

   gcloud run services update run-mysql --add-cloudsql-instances run-to-sql:europe-west2:database-external --set-env-vars CLOUD_SQL_CONNECTION_NAME=run-to-sql:europe-west2:database-external  DB_USER=user_name,DB_PASS=user_password,DB_NAME=user_database

ТАК, ссылка

person marian.vladoi    schedule 03.03.2020