结合了AWS Amplify的AWS AppSync / GraphQL订阅听起来很棒,因为开箱即用,您可以为所有客户端订阅架构中指定的高级域事件。
尽管似乎是自然的扩展,但应该有一种方法可以将所有这些事件广播到lambda或SNS之类的服务,以对这些事件进行内部响应。也许您想记录事件,重新编制索引或汇总更新的数据,或者向用户发送电子邮件或推送通知。就像DynamoDB流一样,您可以触发lambda来更新表。有谁知道实现此目标的好方法?
似乎没有用于lambda的AppSync触发源,但似乎可能有几种方法可以做到这一点:
在ECS / Fargate上创建一个长期运行的进程/服务,以订阅要广播到SNS / Lambda的每个突变。这并不理想,因为您必须自己管理和扩展该过程。
使用DynamoDB流作为lambda触发器。但是,DynamoDB表更改事件的级别比GraphQL突变事件的级别低,并且假定您唯一的数据源是DynamoDB,而AppSync / GraphQL可以插入许多其他数据源。
为每个突变创建lambda解析器,还将事件广播到SNS / Lambda。对于简单地广播SNS事件,也许有一种聪明的方法可以使用管道解析器将可重用的解析器附加到每个突变...
我不确定Amplify框架是如何为其@searchable转换器供电的,无论是它的#2还是#3,还是其他的东西,但似乎在同一领域(在Elasticsearch中重新索引数据以作为响应)进行更新)。我确实记得听说您可以编写自己的变形金刚...也许有人可以编写自己的变形金刚@broadcasted,也可以将所有突变事件广播到SNS?
令我惊讶的是,我没有看到太多有关此主题的讨论。如果有人有好主意,或者我在想这个错误的方法,请告诉我。
答案 0 :(得分:1)
听起来您正在尝试根据传入的突变触发lambda函数。
就像您在选项3中提到的那样-lambda解析器可以实现此功能,但是如果您要执行的是调用一个发布到SNS的通用lambda作为执行的步骤,那么您可以使用管道解析器。 “通用” lambda函数将成为管道中步骤的数据源,然后具有用于Dynamo / ES / Aurora Serverless的常规解析器。
文档: https://docs.aws.amazon.com/appsync/latest/devguide/pipeline-resolvers.html