如何将Google Cloud Run上的Spring Boot服务连接到Cloud SQL实例?
Cloud Run连接Cloud SQL失败解决方案
核心错误原因
你当前同时混用了公网IP连接和Cloud Run内置Cloud SQL连接两种逻辑,是配置冲突导致的通信失败,优先推荐使用更安全的内置套接字连接方案,不需要开放SQL实例公网访问权限。
配置修正步骤
- 调整Spring Boot数据源URL配置,替换原有公网IP格式的URL:
jdbc:mysql:///<你的数据库名>?cloudSqlInstance=<Cloud SQL实例连接名>&socketFactory=com.google.cloud.sql.mysql.SocketFactory&useSSL=false
其中Cloud SQL实例连接名可在Cloud SQL实例详情页获取,格式为项目ID:实例所在区域:实例名 - 确认Spring Boot项目已引入Cloud SQL MySQL套接字工厂依赖,Maven配置示例:
Gradle配置示例:<dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-sql-mysql-socket-factory</artifactId> <version>1.13.0</version> </dependency>implementation 'com.google.cloud:google-cloud-sql-mysql-socket-factory:1.13.0' - 重新打包镜像并上传至Container Registry
权限校验
- 找到Cloud Run服务使用的服务账号(默认服务账号为
[项目编号]-compute@developer.gserviceaccount.com,可在Cloud Run服务部署页的【安全】选项卡查看) - 给该服务账号绑定
Cloud SQL Client角色,可在Cloud SQL实例的【权限】页面操作
部署配置
- 重新部署Cloud Run服务,保留
spring.datasource.url、spring.datasource.username、spring.datasource.password三个环境变量即可 - 保持高级设置中Cloud SQL实例的连接配置处于开启状态
问题排查
如果部署后依旧报错,可通过Cloud Run日志面板确认具体错误类型:
- 提示
Access denied:检查数据库用户名、密码配置是否正确,确认该账号有权限从本地/套接字访问数据库 - 提示
连接超时/通信链路失败:检查Cloud SQL实例连接名拼写是否正确,确认服务账号的Cloud SQL Client角色已绑定
如果你坚持使用公网IP连接方案(仅临时测试用,安全性极低),需要额外在Cloud SQL实例的【授权网络】中添加
0.0.0.0/0允许所有IP访问,Cloud Run的动态出口IP无法固定添加到授权列表。
内容的提问来源于stack exchange,提问作者Radu Aramă
相关产品推荐
相关产品推荐

