AWS Lambda 上的 Firebase listen()

Firebase listen() on AWS Lambda

我正在创建一个具有多种功能的无服务器基础设施。到目前为止,我已经成功地使用 aws-sam-cli.

在 AWS lambda 上发布了一个新函数

最后一个函数是我的 firebase 侦听器,它应该触发某些 aws lambda 函数。

最初,我想创建一个新函数并添加监听器如下:

import firebase_admin    
cred   = firebase_admin.credentials.Certificate(cert_json)
app    = firebase_admin.initialize_app(cred, config)
bucket = storage.bucket(app=app)

node_to_listen = '/alerts/'
firebase_admin.db.reference(node_to_listen).listen(listener)

然而,问题是 AWS lambda 似乎被设计为不能 运行 连续运行,而只能由事件触发。 Firebase listen() 函数也是如此,这意味着我们遇到先有鸡还是先有蛋的问题,谁触发谁?

因此,我该如何发布 firebase 侦听器函数以及在何处发布?它是否应该部署在其他地方(例如 Heroku?)以便持续监听事件请求并将其发送到 aws lambda?或者有没有办法将这两者联系起来?

在我所知道的任何“功能即服务”环境中,都无法保持活跃的倾听者。这种环境的全部目的是运行(短)工作负载以响应事件。您试图通过保留监听器来实际触发事件,这根本不适合 FaaS 模型。

我看到的两种解决方案:

  1. 在保持活跃进程的环境中实施您的侦听器。
  2. 在 FaaS 环境中实现您的侦听器,该环境本身可以侦听 Firebase 实时数据库事件。当前唯一可以这样做的环境 Cloud Functions, which has Firebase Realtime Database as an event source。因此,您随后会从 Cloud Functions 触发您的 Lambda 函数。

第二种解决方案是唯一真正感觉完全无服务器的解决方案,但从 Google Cloud Functions 触发 Amazon Lambda 似乎有点奇怪。

正在开展工作以允许 FaaS 提供商之间的互操作。但我不确定当前状态(link 到 spec/working 组欢迎),也不确定您的场景是否会包含在其中。