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

如何跨项目将Firebase Cloud Functions连接至Cloud SQL实例?

跨项目Firebase Functions连Cloud SQL Postgres报ECONNREFUSED的解决办法

问题根源

跨项目访问Cloud SQL时,仅靠Unix套接字路径无法完成权限验证——项目B的Functions服务账号没有访问项目A中Cloud SQL实例的权限,同时Cloud SQL的权限配置也未对项目B开放。

解决步骤

1. 给项目B的Functions服务账号配置Cloud SQL权限

  • 找到项目B中Cloud Functions使用的默认服务账号:格式通常是PROJECT_ID@appspot.gserviceaccount.com(将PROJECT_ID替换为项目B的ID)
  • 进入项目A的Cloud SQL实例页面,打开IAM标签页
  • 添加项目B的该服务账号,授予至少一个合适的角色:
    • Cloud SQL Client:仅允许连接实例(推荐生产环境使用)
    • Cloud SQL Editor:允许连接并修改实例配置(按需选择)
    • Cloud SQL Admin:最高权限(不推荐生产环境使用)

2. 配置私有网络连接(推荐生产环境)

如果使用VPC网络,需确保项目B的Functions与项目A的Cloud SQL实例网络互通:

  • 给项目A的Cloud SQL实例开启私有IP,并关联到指定VPC网络
  • 在项目B中配置VPC对等连接,打通与项目A VPC的网络
  • 部署项目B的Functions时,指定使用与对等连接关联的VPC网络和子网

3. 核对Unix套接字路径正确性

确保项目B的连接代码中,套接字路径与项目A的实例完全一致:

// Node.js连接示例
const { Pool } = require('pg');
const pool = new Pool({
  user: '你的数据库用户名',
  password: '你的数据库密码',
  database: '你的数据库名',
  host: '/cloudsql/project-a:region:instance-name' // 路径必须与项目A实例完全匹配
});

4. 检查Functions的部署配置

  • 部署项目B的Functions时,必须在firebase.json中添加Cloud SQL实例配置,让平台自动挂载套接字:
{
  "functions": {
    "cloudSqlInstances": "project-a:region:instance-name", // 必填配置
    "vpcConnector": "你的VPC连接器名称", // 使用VPC连接时添加
    "runtimeOptions": {
      "memory": "256MB"
    }
  }
}
  • 执行firebase deploy --only functions重新部署,确保配置生效

5. 公网连接排查(不推荐生产环境)

如果非要使用公网IP连接,需在项目A的Cloud SQL实例连接标签页,将项目B Functions的出口IP添加到授权网络中——注意Functions出口IP是动态的,这种方式稳定性差,优先使用私有网络方案。

测试验证

重新部署项目B的Functions后,调用函数测试连接。若仍报错,查看Cloud Functions日志,确认是否有IAM权限不足的提示,再针对性调整权限配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 00:22:21