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

Posted

技术标签:

【中文标题】使用 pubsub 安排 firebase auth:export 到存储桶【英文标题】:Schedule firebase auth:export to bucket using pubsub 【发布时间】:2021-07-23 14:53:13 【问题描述】:

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

这是我试过的 pubsub:

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 身份验证备份的任何其他方式。

【问题讨论】:

【参考方案1】:

我假设这是因为我无法在其中运行命令行脚本 pubsub 在什么环境下运行。

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


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

请注意,上面的“一些”一词是粗体的,因为正如同一 Github 页面中所解释的那样:

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

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

因此,很遗憾,无法通过云函数自动执行此命令。


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

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

【讨论】:

您能想到使用 Google Cloud 或 firebase 的任何现有 API 的任何其他方式吗? 是的,您可以,使用 Admin SDK 您可以retrieve the entire list of users in batches 并将其存储在受保护的 Firestore 集合(或任何其他存储解决方案)中。 谢谢,不知道为什么我没有想到这一点,我的注意力非常集中在命令行脚本和正确格式的 auth:export 上然后重新导入的简易性… 很高兴能帮到你!如果我的回答对您有帮助,请点赞并可能接受。谢谢 我已经投了赞成票,正在考虑接受它,最后一点替代方案会很好……

以上是关于使用 pubsub 安排 firebase auth:export 到存储桶的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pubsub 模拟器在本地调用 firebase Schedule 函数

如何在有限的时间内安排 Firebase 功能

使用 Firebase Cloud Functions,我可以从外部 API 安排更新以更新 Firestore

Firebase 模拟器:在函数中使用 PubSub

Firebase:我可以在 Firebase 云功能中“不确认”一条 PubSub 消息吗?

Firebase 函数不会看到 pubsub 模拟器在本地运行