У меня есть простое приложение-сервлет 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");
Остальное вся конфигурация остается прежней. Пожалуйста, ознакомьтесь с подробной документацией того же Вот.
Некоторое время я успешно работаю с конфигурацией.