Назад | Перейти на главную страницу

Не удается подключиться из GCP AppEngine к GCP Cloud SQL

У меня есть простое приложение-сервлет Java, развернутое в GCP AppEngine. В том же GCP я создал MySQL-экземпляр GCP Cloud SQL.

Я хотел бы сохранить значение на сервере MySQL, когда кто-то делает запрос HTTP Post. Однако мое приложение Java не может подключиться к GCP Cloud SQL.

На странице Cloud SQL написано All apps in this project. All authorized. Однако мое приложение Java не может подключиться, даже если они находятся в одном проекте GCP.

Когда добавляю все сети, работает корректно. Однако я не хочу этого делать:

В чем может быть причина того, что я не могу подключиться к Cloud SQL из App Engine? Есть ли какая-то конфигурация, которую мне нужно сделать?

Вы не должны заносить в белый список 0.0.0.0/0 - это позволяет любому IP-адресу пытаться подключиться к вашему экземпляру и будет

Я бы предложил использовать Фабрика сокетов JDBC Cloud SQL. Socket Factory использует учетные данные учетной записи службы для аутентификации подключений к вашему экземпляру.

Вы также можете проверить эти инструкции по подключению из App Engine страницу, чтобы убедиться, что вы включили правильный API и предоставили учетной записи службы правильные разрешения.

Вы не должны заносить в белый список все IP-адреса, это сделает ваш экземпляр SQL доступным для всех в Интернете.

Google обрабатывает подключение AppEngine к CloudSQL через сокеты UNIX. Чтобы подключиться с локального компьютера, вы должны использовать INSTANCE_CONNECTION_NAME пока вы подключаетесь из AppEngine, вы должны указать хост как localhost но добавьте путь к сокету как /cloudsql/<INSTANCE_CONNECTION_NAME>. Это для NodeJS.

Для JAVA это что-то вроде

// 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");

Остальное вся конфигурация остается прежней. Пожалуйста, ознакомьтесь с подробной документацией того же Вот.

Некоторое время я успешно работаю с конфигурацией.