Cloud Run 访问 Cloud SQL 踩坑记录
发布于: 2025-6-5
最后更新: 2025-6-5
type
status
date
slug
summary
tags
category
icon
Cloud Run 是 Google Cloud 提供的一款serverless产品,它提供了两种服务的形式,一种是 服务,另一种是 作业 ,本文主要讲讲使用 服务 的过程。
notion image

Cloud Run

Cloud Run 提供的服务可用来部署容器映像源代码函数 ,三者都是 serverless 中常见的角色,我以部署一个 New API 来演示。
New API 官网提供了 docker 部署的方式:Docker 部署 - New API Docs
在 Cloud Run 中,选择 从现有容器镜像部署一个修订版本
notion image
如果部署的项目需要对外提供服务,记得取消 身份验证
notion image
默认情况下,Cloud Run 部署的应用是不能访问 Cloud SQL 中的数据库的,想要 Cloud Run 和 Cloud SQL 能够通信,需要将网络中的连接到 VPC 以获取出站流量勾选上。
notion image
另外一种方式是创建无服务器 VPC 访问通道连接器 ,光是看这个名字都头大,我简单尝试了一下,一个连接器一个月的预估价格是几十美刀,流量不大的话,还是不折腾这个连接器了。
接下来点击创建,稍微等待一会儿就创建好了。

Cloud SQL

New API 官网文档使用的是 MySQL,所以在 Cloud SQL 中我们也创建一个 MySQL 的项目。
为了安全起见,数据库服务不应该暴露到公网上,但是为了方便我们在 Cloud Run 部署的容器中访问,我们在网络中选择分配一个专用IP ,并且需要勾选上 Google Cloud 服务授权
notion image

配置 SQL_DSN

在 NewAPI 中配置外部数据库,需要添加 SQL_DSN,格式为:用户名:密码@tcp(数据库地址:3306)/数据库名
在 Cloud SQL 中,可以分别创建数据库和数据库用户,对应前面的 SQL_DSN 中的用户名、密码和数据库名。
notion image
而此时还剩下一个数据库地址,实际上就是我们前面要求分配的专用IP
notion image
因此以我的这个例子,最终的 SQL_DSN 为:newapiadmin:newpassword@tcp(10.56.65.3:3306)/newapi
接下来返回到 Cloud Run,在变量和密钥中添加 SQL_DSN,再部署一次即可。
notion image

检查

部署完成以后,我们可以通过 CloudSQL Studio 访问 newapidb 数据库,看到各种表都已经生成,那就说明一切正常,完事了。
notion image

部署区域

需要注意的是,部署在香港地区的 Cloud Run 服务不支持绑定自定义域名。同时经过我的测试,即使是部署在香港地区,大陆的访问延迟基本也是在180ms左右,说明 Cloud Run 没有走谷歌的优质网络。在GCP上创建虚拟机时,选择香港地区的高级网络,可以做到国内访问延迟50ms左右,所以使用Cloud Run部署的服务访问体验实际上应该会比较一般。
当我发现延迟180+ms以后,我就放弃了使用Cloud Run来部署服务,延迟太高了就没必要。

总结

一时兴起想使用 Cloud Run + Cloud SQL 来搭建一个自用的服务,在使用过程中遇到 Cloud Run 和 Cloud SQL 网络不通的问题,在谷歌搜索上搜了好多帖子,都没解决,最后是靠 Cloud SQL 提供的连接测试帮忙分析出原因,然后才知道要开启 连接到VPC以获取出站流量
notion image
 
DartNode永久免费无限流量VPS,百星开源项目可申领,自动化审核秒通过!简洁、美观且免费使用的开源短链接项目-sink
Loading...