【发布时间】: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