Как подключиться к базе данных Google Cloud SQL из Metabase (когда Metabase работает в Google Cloud Run) - PullRequest
0 голосов
/ 17 января 2020

Я использую метабазу в Google Cloud Run и пытаюсь подключиться к экземпляру базы данных MySQL (который также находится в Google Cloud SQL, в том же проекте).

NB. Это не база данных приложения Metabase, а скорее соединение базы данных для выполнения анализа данных в соответствии с https://www.metabase.com/docs/latest/setting-up-metabase.html

  • Когда я запускаю Metabase локально, я могу нормально подключиться с помощью Publi c IP (после того, как мой IP был в белом списке)
  • Я не могу подключиться через Metabase в Cloud Run.
  • Я добавил базу данных в Cloud SQL connections в Cloud Run (за: https://cloud.google.com/sql/docs/mysql/connect-run)
  • База данных, к которой я пытаюсь подключиться, - это Реплика чтения (если это имеет какое-либо значение)
  • Когда я разрешаю все в облаке SQL экземпляр с использованием 0.0.0.0/0 Я могу подключиться с помощью Publi c IP. После удаления этого правила я не могу подключиться.
  • Я понимаю, что Cloud Run еще не поддерживает Cloud SQL Частные IP-адреса

Для подключения к базе данных я ограничен использованием веб-сайта Metabase. интерфейс:

enter image description here

В этом интерфейсе я пробовал:

  • Настройка хоста для публикации c IP
  • Установка Additional JDBC connection string options в cloudSqlInstance=<INSTANCE_CONNECTION_NAME>&socketFactory=com.google.cloud.sql.mysql.SocketFactory согласно https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory<INSTANCE_CONNECTION_NAME> заменой на настоящее имя)
    • Когда я устанавливаю это, ошибка: Could not connect to address=(host=<HOST>)(port=3306)(type=master) : Socket fail to connect to host:<HOST>, port:3306. Socket factory failed to initialized with option "socketFactory" set to "com.google.cloud.sql.mysql.SocketFactory" (я отредактировал действительное <HOST> значение)

Мысли:

  • Из того, что я теперь понимаю, когда я устанавливаю socketFactory в Additional JDBC connection string options хост игнорируется.
  • Могу только предположить, что я неправильно отформатировал или настроил поле Additional JDBC connection string options

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 20 января 2020

Вы не можете подключиться к облаку SQL через TCP-соединения, как указано в документации :

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

Вы можете подключиться к экземпляру Cloud SQL, используя имя подключения экземпляра, используя код, подобный следующему:

// The configuration object specifies behaviors for the connection pool.
HikariConfig config = new HikariConfig();

// Configure which instance and what database user to connect with.
config.setJdbcUrl(String.format("jdbc:mysql:///%s", DB_NAME));
config.setUsername(DB_USER); // e.g. "root", "postgres"
config.setPassword(DB_PASS); // e.g. "my-password"

// For Java users, the Cloud SQL JDBC Socket Factory can provide authenticated connections.
// See https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory for details.
config.addDataSourceProperty("socketFactory", "com.google.cloud.sql.mysql.SocketFactory");
config.addDataSourceProperty("cloudSqlInstance", CLOUD_SQL_CONNECTION_NAME);
config.addDataSourceProperty("useSSL", "false");

// ... Specify additional connection properties here.
// ...

// Initialize the connection pool using the configuration object.
DataSource pool = new HikariDataSource(config);


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

Если вы беспокоитесь о безопасности соединения, вы всегда можете выбрать подключение к прокси-серверу Cloud SQL, используя JDB C factory factory . Обратите внимание, что в этой ситуации ваш URL JDB C должен выглядеть следующим образом:

jdbc:mysql:///<DATABASE_NAME>?cloudSqlInstance=<INSTANCE_CONNECTION_NAME>&socketFactory=com.google.cloud.sql.mysql.SocketFactory&useSSL=false&user=<MYSQL_USER_NAME>&password=<MYSQL_USER_PASSWORD>

Попробуйте подключиться, используя полный URL, и просмотрите его несколько раз. Я видел такую ​​же ошибку, когда люди допустили небольшую ошибку в JDB C Url, как лишняя точка с запятой, двоеточие и т. Д. c ..

0 голосов
/ 19 января 2020

Вы не можете использовать Cloud SQL частный IP с Cloud Run, он еще не совместим, вы можете забыть об этом. Чтение реплики ничего не изменит, вы также можете сэкономить деньги и удалить их!

Во-первых, вы сможете подключиться к базе данных Cloud SQL по сети 0.0.0.0/0. Таким образом, вы можете проверить правильность работы вашего контейнера Cloud Run с базой данных, открытой для inte rnet.

. Затем удалите эту конфигурацию и попробуйте перейти на эту страницу для подключения *. 1013 * экземпляр в Cloud Run, как вы сделали. В вашем приложении вы также должны добавить зависимость (maven или gradle) для получения jar фабрики сокетов.

Это должно работать. Поделитесь больше кода или конфигурации, чтобы иметь возможность помочь вам больше!

...