You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCP Cloud Run连接跨项目Cloud SQL实例报不可达、ENOENT错误

跨项目连接Cloud SQL实例报错排障指南

问题现象

跨项目归属连接Cloud SQL实例时,应用抛出两类报错:

  • 实例不可达错误:Cloud SQL instance "${process.env.INSTANCE_CONNECTION_NAME}" is not reachable
  • Unix套接字文件不存在错误:
ENOENT /cloudsql/${process.env.INSTANCE_CONNECTION_NAME}/.s.PGSQL.5432

已完成的前置校验项:

  • Cloud Run服务已配置指向目标跨项目Cloud SQL实例的服务连接
  • 部署使用的服务账号,在当前服务所属项目、Cloud SQL实例所属项目均已授予Cloud SQL Client权限
  • Cloud Run环境变量配置正确,INSTANCE_CONNECTION_NAME取值与目标实例连接名完全匹配
  • 调整存量部署配置、从零重新部署服务均复现相同错误,应用基于Node.js开发,使用Sequelize作为ORM框架

排障方案(按优先级从高到低排查)

1. 修正Sequelize连接配置适配Cloud Run套接字模式

Cloud Run内置的Cloud SQL代理默认通过Unix域套接字挂载实例,不会暴露TCP端口,Sequelize配置错误是该类报错的最高频诱因:

  • 移除配置中写死的host: 'localhost'、port: 5432等TCP连接参数,这类配置会导致驱动直接查找本地TCP端口,绕过代理挂载的套接字路径
  • 若使用v6以下版本的Sequelize,先升级ORM版本——低版本Sequelize对PostgreSQL的Unix套接字连接存在路径拼接bug
  • 正确连接配置参考:
const sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASS, {
  host: `/cloudsql/${process.env.INSTANCE_CONNECTION_NAME}`,
  dialect: 'postgres',
  dialectOptions: {
    socketPath: `/cloudsql/${process.env.INSTANCE_CONNECTION_NAME}`
  }
})

2. 校验目标Cloud SQL实例侧配置

  • 确认目标实例已开启公共IP:Cloud Run默认内置的Cloud SQL代理依赖公共IP建立连接,仅开启私有IP的跨项目实例需要额外配置VPC对等连接与Serverless VPC访问器,否则无法自动连通
  • 检查跨项目连接限制策略:进入目标实例所属项目的组织策略控制台,确认constraints/sql.restrictCrossProjectInstanceUsage策略为允许状态,该策略开启时会静默拦截所有跨项目实例连接,不会返回显式权限报错
  • 确认实例运行状态正常:检查实例是否处于停机、维护、故障恢复状态,这类状态下代理无法正常建立套接字监听

3. 校验Cloud Run服务连接配置有效性

  • 跨项目添加Cloud SQL连接时,不要仅选择当前项目下的实例列表项,需要手动输入跨项目实例的完整连接名(格式为项目ID:区域:实例ID),选错项目、区域、实例ID时,即使环境变量配置正确,Cloud Run也不会挂载对应实例的套接字目录
  • 确认最新部署的修订版本生效:进入Cloud Run修订版本列表,检查当前流量指向的最新修订版本,确认其连接配置中确实存在目标Cloud SQL实例,部署失败、流量未切到新修订都会导致旧配置持续生效
  • 校验服务账号权限传递:确认目标实例所属项目未开启组织级别的跨项目服务账号拦截规则,若配置了“仅允许本项目服务账号访问资源”的组织策略,即使手动授予了Cloud SQL Client角色,跨项目服务账号的请求也会被拦截

4. 运行时挂载校验

部署一个临时调试修订版本,在服务启动脚本中加入ls -la /cloudsql/命令,根据输出判断问题点:

  • 如果/cloudsql目录下不存在和INSTANCE_CONNECTION_NAME同名的子目录,说明Cloud Run侧的Cloud SQL连接配置未生效,回到第3点重新校验配置
  • 如果同名子目录存在,但目录下没有.s.PGSQL.5432套接字文件,说明Cloud SQL代理启动失败,查看Cloud Run系统日志(非应用日志)中cloudsql_agent字段的报错,通常为跨项目权限不足、实例连接名错误、实例侧拦截导致

内容的提问来源于stack exchange,提问作者nm_machine89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:12:06