Подключиться к Google Cloud MySql Из облачного запуска - PullRequest
1 голос
/ 12 февраля 2020

Для примера проекта, над которым я работаю (https://gitlab.com/connorbutch/reading-comprehension-ws), у меня возникли проблемы с подключением к базе данных Google Cloud mysql из запуска Google Cloud. Однако, когда я запускаю локально с одинаковыми аргументами (как в docker, так и в kubernetes), приложение выглядит успешным.

Шаги, которые я выполнил при настройке моего приложения для запуска в облачном хранилище Google, перечислены здесь ( https://cloud.google.com/sql/docs/mysql/connect-run). Я включил mysql дБ в информацию базы данных облака. Вещи, которые я пытался

подключить, используя IP-адрес в строке соединения jdb c (которая работает локально, но этот оператор на странице предполагает, что он может не работать в облачной среде Google, "Cloud Run (полностью управляемая) не поддержка подключения к экземпляру Cloud SQL с использованием TCP. Ваш код не должен пытаться получить доступ к экземпляру с использованием IP-адреса, такого как 127.0.0.1 или 172.17.0.1. "), используя подключение unix, как было предложено, сервер даже не подключается start

Когда я запускаю приложение с IP-адресом в URL-адресе jdb c в облаке Google, оно выглядит так, как будто приложение успешно запускается:

2020-02-12T02:51:01.733606Z 2020-02-12 02:51:01.733  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path '' 
2020-02-12T02:51:01.740162Z 2020-02-12 02:51:01.739  INFO 1 --- [           main] com.connor.Application                   : Started Application in 15.717 seconds (JVM running for 17.715) 

Однако, когда я делаю По первому запросу я вижу следующее:

Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure
Caused by: java.net.SocketTimeoutException: connect timed out
Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

Есть ли у вас какие-либо предложения? Мне интересно, может ли это быть связано с необходимостью настройки нашего источника данных, как указано здесь: https://github.com/GoogleCloudPlatform/java-docs-samples/blob/master/cloud-sql/mysql/servlet/src/main/java/com/example/cloudsql/ConnectionPoolContextListener.java

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Выполнение шагов документации:

  1. Создание и развертывание контейнера
  2. Подключение из облачного запуска

На последнем шаге: « Подключение к облаку SQL» 2-й ссылки вместо фрагмента кода, я использовал следующую команду из инструкции GitHub :

 gcloud run services update helloworld --add-cloudsql-instances [INSTANCE_CONNECTION_NAME] --set-env-vars CLOUD_SQL_CONNECTION_NAME=[INSTANCE_CONNECTION_NAME],DB_USER=[MY_DB_USER],DB_PASS=[MY_DB_PASS],DB_NAME=[MY_DB]

где "helloworld" - это название моей службы.

Пожалуйста, будьте внимательны с spacing в этой команде, поскольку она может легко выдавать ошибки.

Сказав, что после выполнения команды curl я не получил никаких ошибок, поэтому мое приложение успешно работает.

Кроме того, во время моего расследования ошибки, которую вы получили, я обнаружил эту ссылку , который содержит список возможных причин этой ошибки.

Наконец, поскольку ошибка указывает на тайм-аут, вы также можете попытаться изменить время ожидания запроса Cloud Run, выполнив this .

Еще немного Вам могут пригодиться следующие чернила:

  1. Диагностика проблем с облаком SQL экземпляры
  2. Устранение неполадок Cloud Run (полностью управляемый)

Надеюсь, эта информация поможет.

0 голосов
/ 13 февраля 2020

К сожалению, документ https://cloud.google.com/sql/docs/mysql/connect-run в настоящее время не документирует инструкции Knative. Каждый раз, когда вы видите «Cloud Run (полностью управляемый)», это не относится к реализации Kubernetes.

Если вы используете Cloud Run в кластере Kubernetes / GKE, это, вероятно, более применимо. https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine При этом говорится, что в этом подходе используется контейнер Sidecar "Cloud SQL Proxy", который пока еще не поддерживается Knative.

Однако, используя эти инструкции, вы можете подключиться в облачный SQL экземпляр по частному IP, так как кластеры GKE могут находиться в VP C (хотя приложения "Cloud Run полностью управляемые" в настоящее время не могут).

...