我正在创建具有多种功能的无服务器基础架构。到目前为止,我已经成功使用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?还是有办法将两者连接起来?
答案 0 :(得分:2)
在我所知道的任何“功能即服务”环境中,都无法保持活动的侦听器。这种环境的全部目的是为了响应事件而运行(减少)工作负载。您正在尝试通过保留侦听器来实际触发事件,这根本不适合FaaS模型。
我可以看到两种解决方案:
第二种解决方案是唯一真正感觉完全没有服务器的解决方案,但是从Google Cloud Functions触发Amazon Lambda似乎有点奇怪。
正在进行一些工作,以允许FaaS提供程序之间进行互操作。但是我不确定当前的状态(欢迎链接到规范/工作组),也不确定您的方案是否在其中。