使用Java和Cloud SQL的AppEngine托管虚拟机

时间:2016-02-28 20:12:47

标签: java google-app-engine google-cloud-sql google-managed-vm

我希望Java Appengine托管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 Engine应用程序

Java不支持使用Cloud SQL Proxy。

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

是否有实际支持的方法?谷歌的任何人都能回答?

2 个答案:

答案 0 :(得分:1)

2016年4月更新

我们有一个新的Java库,用于从托管虚拟机和其他环境连接到云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

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审核/修复文档,因为它存在一些问题。感谢您引起我们的注意。

答案 1 :(得分: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>

但是在关注rabit漏洞之后我不认为在框架中使用(播放框架)将TCP数据库连接器更换为基于套接字的插件很容易。

真的很想能够定义&#34;允许&#34; AppEngine项目在Cloud SQL实例设置中 - 没有这种能力我将不得不在AWS上运行...