我无法通过 sql 身份验证代理在 GCP 中通过 springboot 应用程序从云运行到云 sql 进行连接。有人有一步一步的例子吗?
I can't connect in GCP by sql auth proxy from cloudrun to cloud sql by springboot application. Somebody have an example stepbystep?
我可以使用 sql 授权代理从本地机器配置连接,但是 我不能从云 运行 带有 hikaricp 的 springboot 应用程序到云 sql public ip 使用 unix socket。
有人有完整的例子吗?
我在 gcp 文档中读到,我不需要为 sql 身份验证代理创建 docker 来连接云 运行 云 sql.It 在您定义数据库连接时创建在云配置中 运行.
POM.xml 添加了以下依赖项:
<dependency>
<groupId>com.google.cloud.sql</groupId>
<artifactId>mysql-socket-factory</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
我设置了它,接下来我在应用程序中定义了以下应用程序属性(通过经典 jdbc 可以很好地在云中添加我的 ip sql 以允许连接,但我需要使用 sql auth proxy by unix socket to avoid to add a vpc, hikariCP:
我不会解释太长太无聊的原因)
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql:///DBSCHEMA
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.socketFactory=com.google.cloud.sql.mysql.SocketFactory
spring.datasource.cloudSqlInstance=GCP_PROJECT:GCP_REGION:DBNAME
spring.datasource.ipTypes=PUBLIC
logging.level.com.zaxxer.hikari=TRACE
有人可以帮我举一些工作正常的例子吗?
如果在您的示例中为 sql 身份验证代理创建了 docker,请对其进行解释。
在互联网上我找不到资源清楚地谈论这个配置。
非常感谢。
Cloud 运行 设置了一个 unix 套接字,因此您需要使用一个使用该 unixSocketPath
的路径。
jdbc:mysql:///<DATABASE_NAME>?unixSocketPath=</PATH/TO/UNIX/SOCKET>&cloudSqlInstance=<INSTANCE_CONNECTION_NAME>&socketFactory=com.google.cloud.sql.mysql.SocketFactory&user=<MYSQL_USER_NAME>&password=<MYSQL_USER_PASSWORD>
a Cloud 运行 unixsocket 路径如下:
/cloudsql/{connection_id}
{connection_id}
可能有这样的格式:GCP_PROJECT:GCP_REGION:DBNAME
所以基本上在你的 connectionString 中,你应该有:
?unixSocketPath=/cloudsql/myproject:us-central1:my_instance
解决方案:
为服务帐户典型名称创建 json 密钥:
GCP_PROJECT_ID-GCP_ID_SERVICE_ACCOUNT-compute_developer_gserviceaccount_com
并将 json 密钥文件保存在资产目录中(在 java 项目的根目录下)
entrypoint.sh
.
在 DockerFile 中为 json 服务帐户密钥添加行:
运行 导出 GOOGLE_APPLICATION_CREDENTIALS=assets/GCP_PROJECT_ID-GCP_ID_SERVICE_ACCOUNT-compute_developer_gserviceaccount_com-GCP_KEY.json
pom.xml 在下方添加:
用于sql auth proxy unix socket
<dependency>
<groupId>com.google.cloud.sql</groupId>
<artifactId>mysql-socket-factory</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
<version>1.32.1</version>
</dependency>
连接器mysql:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
In application.properties 或 application-test.properties(如果您使用 spring 配置文件部署在 TEST GCP 云 运行):
spring.datasource.url=jdbc:mysql://google/DB_SCHEMA?cloudSqlInstance=GCP_PROJECT_ID:GCP_REGION:DB_ISTANCE&socketFactory =com.google.cloud.sql.mysql.SocketFactory&useSSL=false
spring.datasource.username=*****
spring.datasource.password=*****
部署解决方案
我将使用 gitlab 变量,我将传递 url、用户名和密码,但这是其他工作...
N.B.:
com.google.cloud.sql.mysql.SocketFactory告诉你使用unix socket!
Cloud 运行 启动时启动 sql auth proxy if in cloud 运行 配置中的连接部分设置数据库(如果在同一个项目中,如果在其他项目中,您将看到一个替代的下拉列表您将手动添加 GCP_PROJECT:GCP_REGION:DB)。
您可以定义多个数据库来连接,但这是另一项工作 ;)
我可以使用 sql 授权代理从本地机器配置连接,但是 我不能从云 运行 带有 hikaricp 的 springboot 应用程序到云 sql public ip 使用 unix socket。 有人有完整的例子吗? 我在 gcp 文档中读到,我不需要为 sql 身份验证代理创建 docker 来连接云 运行 云 sql.It 在您定义数据库连接时创建在云配置中 运行.
POM.xml 添加了以下依赖项:
<dependency>
<groupId>com.google.cloud.sql</groupId>
<artifactId>mysql-socket-factory</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
我设置了它,接下来我在应用程序中定义了以下应用程序属性(通过经典 jdbc 可以很好地在云中添加我的 ip sql 以允许连接,但我需要使用 sql auth proxy by unix socket to avoid to add a vpc, hikariCP:
我不会解释太长太无聊的原因)spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql:///DBSCHEMA
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.socketFactory=com.google.cloud.sql.mysql.SocketFactory
spring.datasource.cloudSqlInstance=GCP_PROJECT:GCP_REGION:DBNAME
spring.datasource.ipTypes=PUBLIC
logging.level.com.zaxxer.hikari=TRACE
有人可以帮我举一些工作正常的例子吗? 如果在您的示例中为 sql 身份验证代理创建了 docker,请对其进行解释。 在互联网上我找不到资源清楚地谈论这个配置。
非常感谢。
Cloud 运行 设置了一个 unix 套接字,因此您需要使用一个使用该 unixSocketPath
的路径。
jdbc:mysql:///<DATABASE_NAME>?unixSocketPath=</PATH/TO/UNIX/SOCKET>&cloudSqlInstance=<INSTANCE_CONNECTION_NAME>&socketFactory=com.google.cloud.sql.mysql.SocketFactory&user=<MYSQL_USER_NAME>&password=<MYSQL_USER_PASSWORD>
a Cloud 运行 unixsocket 路径如下:
/cloudsql/{connection_id}
{connection_id}
可能有这样的格式:GCP_PROJECT:GCP_REGION:DBNAME
所以基本上在你的 connectionString 中,你应该有:
?unixSocketPath=/cloudsql/myproject:us-central1:my_instance
解决方案:
为服务帐户典型名称创建 json 密钥:
GCP_PROJECT_ID-GCP_ID_SERVICE_ACCOUNT-compute_developer_gserviceaccount_com
并将 json 密钥文件保存在资产目录中(在 java 项目的根目录下)
entrypoint.sh
.在 DockerFile 中为 json 服务帐户密钥添加行:
运行 导出 GOOGLE_APPLICATION_CREDENTIALS=assets/GCP_PROJECT_ID-GCP_ID_SERVICE_ACCOUNT-compute_developer_gserviceaccount_com-GCP_KEY.json
pom.xml 在下方添加:
用于sql auth proxy unix socket
<dependency>
<groupId>com.google.cloud.sql</groupId>
<artifactId>mysql-socket-factory</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
<version>1.32.1</version>
</dependency>
连接器mysql:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
In application.properties 或 application-test.properties(如果您使用 spring 配置文件部署在 TEST GCP 云 运行):
spring.datasource.url=jdbc:mysql://google/DB_SCHEMA?cloudSqlInstance=GCP_PROJECT_ID:GCP_REGION:DB_ISTANCE&socketFactory =com.google.cloud.sql.mysql.SocketFactory&useSSL=false
spring.datasource.username=*****
spring.datasource.password=*****
部署解决方案
我将使用 gitlab 变量,我将传递 url、用户名和密码,但这是其他工作...
N.B.: com.google.cloud.sql.mysql.SocketFactory告诉你使用unix socket! Cloud 运行 启动时启动 sql auth proxy if in cloud 运行 配置中的连接部分设置数据库(如果在同一个项目中,如果在其他项目中,您将看到一个替代的下拉列表您将手动添加 GCP_PROJECT:GCP_REGION:DB)。 您可以定义多个数据库来连接,但这是另一项工作 ;)