兼容多区域nam5存在Firestore数据库,1st Gen云函数仍部署失败
项目详情
- Firebase项目ID:
hammer-strength-gym-bethel-001 - Firestore数据库位置:nam5(多区域,兼容1st Gen云函数)
- 云函数版本:1st Gen
- 触发器:
firestore.document('members/{memberId}').onCreate
云函数代码(functions/index.js)
const functions = require('firebase-functions'); const admin = require('firebase-admin'); // Initialize Firebase Admin SDK admin.initializeApp(); /** * Cloud Function triggered on new member creation in Firestore. * This function is intended to set an 'isActive' flag to true. */ exports.onNewMemberAdded = functions.firestore .document('members/{memberId}') .onCreate(async (snapshot, context) => { const newMember = snapshot.data(); const memberId = context.params.memberId; console.log(`New member added: ${memberId}`, newMember); try { // Update the document to set isActive to true await snapshot.ref.update({ isActive: true }); console.log(`Member ${memberId} 'isActive' status set to true.`); return null; } catch (error) { console.error(`Error processing new member ${memberId}:`, error); // Re-throw the error to indicate function failure throw new Error(`Failed to update member ${memberId}: ${error.message}`); } });
遇到的问题
执行firebase deploy --only functions部署失败,云函数日志错误信息:
Firestore database 'projects/hammer-strength-gym-bethel-001/databases/(default)' does not exist. Please create a "(default)" Firestore Native database first.
已采取的排查步骤
- 因原Firestore区域(me-west1)不支持1st Gen云函数,已删除原数据库并等待冷却期后,在nam5区域重建默认Firestore Native数据库
- 多次执行
firebase logout和firebase login --reauth --no-localhost,确认CLI已登录正确账户且指向目标项目 - 排除Cloud Runtime Config故障(该问题已自行恢复)
环境信息
- 操作系统:Windows 10
- Node.js版本:v20.11.1(LTS)
- npm版本:10.2.4
- Firebase CLI版本:13.13.0
- firebase-functions SDK版本:4.9.0
- firebase-admin SDK版本:11.11.1
解决方案
1. 显式指定Firestore位置初始化Admin SDK
删除重建数据库后可能存在元数据同步延迟,显式指定数据库位置可绕过该问题:
修改Admin初始化代码,替换原admin.initializeApp();:
admin.initializeApp({ projectId: 'hammer-strength-gym-bethel-001', firestore: { locationId: 'nam5' } });
2. 同步本地Firebase项目配置
执行以下命令确认本地配置与云端同步:
firebase projects:describe hammer-strength-gym-bethel-001
查看输出的resources字段,确认包含Firestore数据库信息。若配置缺失,重新初始化functions目录(保留现有代码):
cd functions firebase init functions
3. 等待后端元数据同步
删除重建Firestore后,云端元数据同步最长可能需要30分钟。期间可通过Google Cloud Console确认Firestore数据库状态为ACTIVE,待状态稳定后再尝试部署。
4. 显式指定云函数部署区域
1st Gen云函数默认部署在us-central1,需确保该区域与nam5多区域兼容。可在代码中显式指定区域:
exports.onNewMemberAdded = functions.region('us-central1').firestore .document('members/{memberId}') .onCreate(async (snapshot, context) => { // 原函数逻辑不变 });
5. 验证云函数服务账号权限
打开Google Cloud Console的IAM页面,找到云函数默认服务账号(格式:PROJECT_ID@appspot.gserviceaccount.com),确认其拥有Firebase Admin SDK Administrator Service Agent或Editor角色(测试后建议调整为最小权限)。
内容的提问来源于stack exchange,提问作者Khalid Kemal

