【问题标题】:Firebase listen() on AWS LambdaAWS Lambda 上的 Firebase 监听()
【发布时间】:2019-01-10 23:47:01
【问题描述】:

我正在创建一个具有多种功能的无服务器基础架构。到目前为止,我已经成功地使用 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?或者有没有办法把这两者联系起来?

【问题讨论】:

  • 您可以创建一个CloudWatch event 以每隔一分钟左右的时间触发监听器 Lambda。侦听器应该触发的所有其他 Lambda 都可以订阅 AWS SNS 主题。所以 listener 会向 SNS topic 发布消息,然后 topic 会触发所有订阅的 Lambdas。
  • 是的,但重点是 Firebase 侦听器不断侦听事件,然后立即触发函数 listener(event) 中定义的写入操作。这听起来更像是一个 cron 作业,您每分钟左右执行一个函数。如果在那一分钟内 Firebase 发生变化,它不会触发正确的响应。我们需要在 Firebase 发现更改时触发操作。
  • 那么负责firebase change的函数不能发布change事件?
  • 是的,它可以发布更改事件,但它需要在某个地方运行。如果它在 AWS lambda 上运行,那么它不会连续运行。
  • 监听器连续运行是有意义的,但是进行更改的函数可以在 SNS 中实时发布事件以调用下游函数?对不起,如果我误解了。

标签: amazon-web-services firebase aws-lambda firebase-admin


【解决方案1】:

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

我能看到的两种解决方案:

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

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

正在开展工作以允许 FaaS 提供商之间的互操作。但我不确定当前状态(欢迎链接到规范/工作组),也不确定您的方案是否会在其中涵盖。

【讨论】:

  • 我明白了。但是,如果有类似 AWS Lambda for Cloud 功能的东西,那将是解决方案吗?另外,firebase 监听器的典型用例是什么,通常是 1 号吗?
  • Lambda 和 GCF 都是 FaaS 环境。你想用你的代码完成什么?
  • 这个想法是有一个后台进程来创建某些报告/元数据的摘要。将新报告添加到 Firebase 时,该函数会加载当天的所有报告,并使用新的更新值创建摘要。然后它将聚合值再次存储在不同节点上的 FB 上,这样在仪表板中我们就不必执行此过程。
  • 老实说,我刚刚审查了 Firebase 的 GCF,这正是我所需要的。 firebase.google.com/docs/functions/use-cases 与 Amazon Lambda 的 Docs 相比,Firebase/Google Cloud(最近不确定差异)是首选方式。用户友好得多,部署似乎也简单得多。不要有偏见或任何事情,但是当他们有 GCF 时,谁想使用 Lambda?刚花了两天时间试图理解 Amazon 文档。
  • 再次感谢您指出 Firebase 如何实现我想要做的事情。你们太棒了,我设法在 30 分钟内准确地编写了我想要的程序,而无需事先了解 Cloud Functions。你想让我更新你的问题还是添加一个单独的答案来展示它是如何工作的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
相关资源
最近更新 更多