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
相关产品推荐
相关产品推荐

