0

我想要一个 Java Appengine Managed VM 应用程序连接到第二代云 SQL 实例。文档中存在差异 - 我无法确定 Google 是否真的支持它!

https://cloud.google.com/appengine/docs/managed-vms/java/using-cloud-sql 状态:

4:在控制台中,授予您的 App Engine 应用程序访问 Google Cloud SQL 实例的权限。

但我认为没有办法做到这一点。在 Cloud SQL 管理控制台中,在实例的属性下,有:

授权申请:无

似乎没有办法授权应用程序?

然后在此页面https://cloud.google.com/sql/docs/dev-access上声明:

Java App 引擎应用程序

Java 不支持使用 Cloud SQL 代理。

因此,您似乎无法使用 Cloud SQL 代理。我让它全部工作的唯一方法是向全世界开放 SQL 端口,以便托管 VM 实例可以通过其公共 IP 地址连接到它,但这是一个可怕的解决方案!

是否有实际支持的方式来执行此操作?谷歌的任何人都可以回答吗?

4

2 回答 2

1

2016 年 4 月更新

我们有一个新的 Java 库,用于从托管 VM 和其他环境连接到 Cloud SQL 实例:https ://github.com/GoogleCloudPlatform/cloud-sql-mysql-socket-factory

它仍然很新,所以通常的警告适用,但我们在测试中没有发现任何问题。


老答案:

我认为现在最好的选择是使用 junixsocket 库,如本文所述:https ://stackoverflow.com/a/34820600

如果您使用 maven-war-plugin 来打包您的应用程序,那么添加以下两个依赖项就足够了:

<dependency>
  <groupId>com.kohlschutter.junixsocket</groupId>
  <artifactId>junixsocket-mysql</artifactId>
  <version>2.0.4</version>
</dependency>
<dependency>
  <groupId>com.kohlschutter.junixsocket</groupId>
  <artifactId>junixsocket-native-common</artifactId>
  <version>2.0.4</version>
</dependency>

对于 Play Framework,添加以下依赖项:

libraryDependencies += "com.kohlschutter.junixsocket" % "junixsocket-mysql" % "2.0.4"
libraryDependencies += "com.kohlschutter.junixsocket" % "junixsocket-native-common" % "2.0.4"

application.conf按如下方式配置您的 Play :

db.default.url="jdbc:mysql:///mydb?socketFactory=org.newsclub.net.mysql.AFUNIXDatabaseSocketFactory&junixsocket.file=/cloudsql/PROJECT_ID:REGION:INSTANCE_NAME"

我们希望将来提供一些不需要使用 junixsocket 或类似库的东西。

我们将审查/修复https://cloud.google.com/appengine/docs/managed-vms/java/using-cloud-sql上的文档,因为它存在一些问题。感谢您提请我们注意。

于 2016-02-28T20:39:56.493 回答
0

我终于让它在带有这个 xml 的托管 VM 上运行:

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <application>thmadmin-ben</application>
    <version>master</version>

    <threadsafe>true</threadsafe>
    <vm>true</vm>
    <precompilation-enabled>false</precompilation-enabled>

    <manual-scaling>
        <instances>1</instances>
    </manual-scaling>

    <beta-settings>
        <setting name="cloud_sql_instances" value="xxx-ben:us-east1:yyy"/>
    </beta-settings>
</appengine-web-app>

但是在跟随兔子洞之后,我认为在我正在使用的框架(播放框架)中将 TCP 数据库连接器换成基于套接字的连接器并不容易。

真的很想能够在 Cloud SQL 实例设置中定义“允许的”AppEngine 项目——如果没有这个能力,我将不得不在 AWS 上运行......

于 2016-03-01T23:14:30.143 回答