如何在无服务器模型中初始化 firebase 应用程序?什么是并发应用程序限制?

How can I initialize firebase app in a serverless model? What is the concurrent app limit?

我创建了一个无服务器函数来执行 Firebase Token Validation

一切正常。除了,我在后续调用初始化我的应用程序时遇到错误,默认应用程序已经存在(同一个容器)。这提出了一些问题。

  1. 如果我的无服务器基础架构要启动多个并发容器,每个容器都用于初始化应用程序。这也会导致这个错误吗?该应用程序是在其他地方初始化的吗?还是此错误仅局限于本地实例?
  2. 如果是后者,如果我提供一个基于它在其中旋转的容器的命名应用程序,对于一次可以初始化的应用程序的最大数量是否有 firebase 限制?

这就是我现在初始化应用程序的方式:

cred = credentials.Certificate(SERVICE)
firebase_admin.initialize_app(cred)

我可以这样做,但不确定 firebase 应用限制或并发初始化(无法在文档中找到任何细节):

cred = credentials.Certificate(SERVICE)
firebase_admin.initialize_app(cred, 'APP-NAME-[CONTAINERID]')

或者,我是否应该使用我自己的 JWT 解码器并从 google 中获取 public 键重写它?

这里是完整的错误:

Error occurred setting firebase credentials: The default Firebase app already exists. This means you called initialize_app() more than once without providing an app name as the second argument. In most cases you only need to call initialize_app() once. But if you do want to initialize multiple apps, pass a second argument to initialize_app() to give each app a unique name.

更新:AWS Lambda,Python。

我将进行以下测试,以防止在同一容器内重新初始化应用程序以执行热函数,并假设执行 [=] 没有 API 限制14=] 并且这不会与并发容器执行冲突。如果测试结果不同,我会报告回来。

try:
    firebase_admin.get_app()
    logger.info('firebase already intialized.')
except ValueError as e:
    logger.info('firebase not initialized. initialize.')
    cred = credentials.Certificate(SERVICE)
    firebase_admin.initialize_app(cred)

我可能仍会迁移到另一个 JWT 验证以减少函数大小(因为我已经有一个供我自己的应用程序使用的 jwt 库)并且不再依赖 Firebase API 对其进行解码。

如果您在初始化 admin SDK 时遇到错误,提示默认应用程序已存在,这意味着您正在尝试在同一进程中两次初始化 admin SDK。显然,不要那样做。如果每个进程只初始化一次,您将永远不会看到此错误。

您必须注意每个服务器实例只调用一次 init 方法。从您显示的代码中不清楚您在做什么。我不知道 python,但是使用节点,您可以在全局上下文中初始化一次而不会出现问题。如果您需要在函数执行期间进行初始化,您应该有一些标志来检查以确保默认的 Firebase 应用程序尚未初始化,并且仅根据该标志有条件地进行初始化。