无法从 App Engine flex Java 上的不同项目连接到 Cloud SQL
Unable to connect to Cloud SQL from different project on App Engine flex Java
这是抛出的异常:
javax.servlet.ServletException: javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
稍后我还在堆栈跟踪中收到此消息:
Caused by: java.lang.RuntimeException: The Google Cloud SQL API is not enabled for project [xxxxxx]. Please use the Google Developers Console to enable it: https://console.cloud.google.com/apis/api/sqladmin/overview?project=xxxxxx
当我单击控制台 link 时,我可以看到云 SQL Api 已启用,并且当数据库在同一个项目中时代码运行良好。我还在包含云 SQL 数据库且角色 Cloud SQL Client
的项目中添加了具有 App Engine flexible environment Service Agent
角色的 AppEngine 灵活服务帐户。
接下来我应该尝试什么?谢谢
更新
pom.xml:
-- update2 不再需要那个文件 --
访问不同项目中的 Cloud SQL 实例时,请务必在源项目中启用 Cloud SQL Admin API。复制错误消息中的 link 并将项目 ID 替换为其他项目 ID。当前消息具有误导性,因为它当前假定该实例位于同一项目中。
inter-project 云 SQL 通信需要两件事:
- 包含 Cloud SQL 实例的项目必须启用 Cloud SQL Admin API
- 想要访问它的项目必须在包含 Cloud SQL 实例 (source):
的项目上具有适当的 Cloud SQL IAM 角色
App Engine and Cloud SQL in different projects
For App Engine applications and Cloud SQL instances in different projects, you must grant the default appengine service account ([PROJECT-ID]@appspot.gserviceaccount.com)
one of the following IAM roles:
- Cloud SQL Client
- Cloud SQL Editor
- Cloud SQL Admin
这是抛出的异常:
javax.servlet.ServletException: javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
稍后我还在堆栈跟踪中收到此消息:
Caused by: java.lang.RuntimeException: The Google Cloud SQL API is not enabled for project [xxxxxx]. Please use the Google Developers Console to enable it: https://console.cloud.google.com/apis/api/sqladmin/overview?project=xxxxxx
当我单击控制台 link 时,我可以看到云 SQL Api 已启用,并且当数据库在同一个项目中时代码运行良好。我还在包含云 SQL 数据库且角色 Cloud SQL Client
的项目中添加了具有 App Engine flexible environment Service Agent
角色的 AppEngine 灵活服务帐户。
接下来我应该尝试什么?谢谢
更新
pom.xml:
-- update2 不再需要那个文件 --
访问不同项目中的 Cloud SQL 实例时,请务必在源项目中启用 Cloud SQL Admin API。复制错误消息中的 link 并将项目 ID 替换为其他项目 ID。当前消息具有误导性,因为它当前假定该实例位于同一项目中。
inter-project 云 SQL 通信需要两件事:
- 包含 Cloud SQL 实例的项目必须启用 Cloud SQL Admin API
- 想要访问它的项目必须在包含 Cloud SQL 实例 (source): 的项目上具有适当的 Cloud SQL IAM 角色
App Engine and Cloud SQL in different projects
For App Engine applications and Cloud SQL instances in different projects, you must grant the default appengine service account (
[PROJECT-ID]@appspot.gserviceaccount.com)
one of the following IAM roles:
- Cloud SQL Client
- Cloud SQL Editor
- Cloud SQL Admin