安排 firebase auth:使用 pubsub 导出到存储桶

问题描述

我正在尝试使用 pubsub 将 firebase auth:export 安排到存储桶中。我的目的是每天备份 auth(firebase auth:export输出非常适合我的目的)。

这是我试过的发布订阅

const functions = require('firebase-functions')
const exec = require("child_process").exec

const datetime = new Date();
const formattedDate = datetime.toISOString().slice(0,10)

const commandString = `firebase auth:export auth_export_${formattedDate}.json --format=JSON && \
gsutil -m cp -r auth_export_${formattedDate}.json gs://backup_firebase_auth_daily && \
rm auth_export_${formattedDate}.json`

exports.scheduledFirebaseAuthExport = functions.pubsub
    .schedule('every 24 hours')
    .onRun(() => {
        return exec(commandString,(error,stdout,stderr) => {
            if (error) {
                console.log(`error: ${error.message}`);
                process.exit();
                return;
            }
            if (stderr) {
                console.log(`stderr: ${stderr}`);
                process.exit();
                return;
            }
            console.log(stdout);
            process.exit();
        });
    });

但我收到以下错误

/bin/sh: 1: firebase: not found

我假设这是因为我无法在 pubsub 运行的任何环境中运行命令行脚本。

欢迎使用任何其他方式使用 Google Cloud API 或 firebase 获取 firebase 身份验证的备份。

解决方法

我假设这是因为我无法在其中运行命令行脚本 pubsub 运行的任何环境。

实际上,您无法在 Cloud Function 中执行命令行脚本(Firebase CLI 命令和 gsutil 都不是),这是运行代码的“环境”(这里的 Pub/Sub 是 mechanism that triggers Cloud Function ).


另一方面,由于“Firebase CLI 也可以以编程方式用作标准节点模块”,如here 所述, 您可以通过 Cloud Functions 执行 CLI 的一些命令。

请注意,上面的“some”这个词是粗体的,因为,正如在同一个 Github 页面中所解释的:

注意:在 Cloud Functions 等有限环境中使用时,并非全部 firebase-tools 命令将以编程方式工作,因为它们需要 访问本地文件系统。

auth:export 命令就是这种情况,它“将活动项目的用户帐户导出到 JSON 或 CSV 文件”。

因此,遗憾的是,无法通过 Cloud Functions 自动执行此命令。


使用 Google Cloud API 获取 Firebase 身份验证备份的任何其他方法 否则欢迎使用 firebase。

一种方法是使用 Admin SDK:您可以 retrieve the entire list of users in batches 并将其存储在受保护的 Firestore 集合(或任何其他存储解决方案)中。这可以从 Cloud Function(例如 scheduled Cloud Function)或您拥有的运行 Node.js、Java、Python 等的服务器触发。