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

Google Cloud Run集成Firestore遇ERR_BUFFER_OUT_OF_BOUNDS错误求助

排查Cloud Run连接Firestore出现ERR_BUFFER_OUT_OF_BOUNDS的问题

问题背景

此前Google Cloud Run与Firestore集成功能运行正常,近期无法执行任何CRUD操作,但身份验证仍可正常进行。该问题仅出现在Google Cloud Run实例中,使用服务账号本地连接同一数据库时无异常。

报错信息

2024-08-23 10:19:55.857 CEST
Caused by: Error
2024-08-23 10:19:55.857 CEST
    at Firestore.getAll (/home/node/app/node_modules/@google-cloud/firestore/build/src/index.js:1007:23)
2024-08-23 10:19:55.857 CEST
    at DocumentReference.get (/home/node/app/node_modules/@google-cloud/firestore/build/src/reference/document-reference.js:180:32)
2024-08-23 10:19:55.857 CEST
    at compareCredentials (file:///home/node/app/auth.js:55:40)
2024-08-23 10:19:55.857 CEST
    at authenticate (file:///home/node/app/auth.js:200:16)
2024-08-23 10:19:55.857 CEST
    at postAuthAdmin (file:///home/node/app/routes.js:354:37)
2024-08-23 10:19:55.857 CEST
    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
2024-08-23 10:19:55.857 CEST
    at async Server.server (file:///home/node/app/server.js:173:15) {
2024-08-23 10:19:55.857 CEST
  code: 'ERR_BUFFER_OUT_OF_BOUNDS'
2024-08-23 10:19:55.857 CEST
}

相关代码

const firestore = new Firestore({ databaseId: 'projecttest' })

const credsColl = firestore.collection('creds')
const adminCredsDoc = credsColl.doc('admin')

const adminDoc = await adminCredsDoc.get() // ERR_BUFFER_OUT_OF_BOUNDS

目标文档内容(模拟值)

{
    "user": "admin",
    "password": "$2a$12$kHkqVa3fHz7qRBpv5BSPCOjci1H77AGHNXsReL3Huw9vITk5lqcXG"
}

排查方向及解决方法

1. 依赖包版本不兼容

ERR_BUFFER_OUT_OF_BOUNDS通常和Node.js的Buffer操作逻辑相关,大概率是@google-cloud/firestore包版本存在bug,或是与当前Node.js版本不匹配。

  • 升级@google-cloud/firestore到最新稳定版:
    npm update @google-cloud/firestore
    
  • 检查Node.js版本是否符合包要求:查看@google-cloud/firestore的package.json中engines字段,确保Cloud Run使用的Node.js版本与本地一致。
  • 排查依赖冲突:执行npm ls buffer查看buffer相关依赖树,若存在版本不一致的情况,手动锁定buffer版本或清理冲突依赖。

2. Cloud Run环境配置异常

虽然身份验证正常,但Firestore API请求可能在传输中出现数据截断:

  • 检查VPC连接配置:确认是否启用了Firestore私有访问,是否有防火墙规则限制了Cloud Run到Firestore的流量。
  • 验证服务账号权限:确保Cloud Run使用的服务账号拥有datastore.user或cloud.firestore的完整操作权限(避免权限变更导致的隐性限制)。
  • 重启Cloud Run实例:环境缓存可能引发异常,重启后可清除临时状态。

3. Firestore文档数据异常

文档内容看似正常,但可能存在隐藏特殊字符或编码问题:

  • 重新写入目标文档:用标准JSON格式重新生成并写入数据,避免特殊字符或编码错误。
  • 测试其他文档:尝试获取其他Firestore文档,若仅目标文档报错,说明数据本身存在问题。

4. Node.js环境版本差异

本地与Cloud Run的Node.js版本不一致,可能导致Buffer处理逻辑不同:

  • 在Dockerfile中指定与本地一致的Node.js版本,例如:
    FROM node:18-alpine
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 08:11:21