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

兼容多区域nam5存在Firestore数据库,1st Gen云函数仍部署失败

问题:Firebase 1st Gen云函数部署提示Firestore默认数据库不存在(已创建兼容区域数据库)

项目详情

  • 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:43:20