aws-lambda - 我可以触发 Lambda 函数或 SNS 事件来响应 AppSync GraphQL 突变吗?
问题描述
AWS AppSync/GraphQL 订阅与 AWS Amplify 相结合听起来很棒,因为您可以开箱即用地为您的所有客户端订阅架构中指定的高级域事件。
尽管应该有一种方法将所有这些事件广播到像 lambda 或 SNS 这样的服务以在内部对这些事件做出反应,这似乎是一种自然的扩展。也许您想记录事件、重新索引或汇总更新的数据,或者向用户发送电子邮件或推送通知。就像 DynamoDB Streams 允许您触发 lambda 以更新表一样。有人知道实现这一目标的好方法吗?
似乎没有用于 lambda 的 AppSync 触发器源,但似乎有几种方法可以做到这一点:
在 ECS/Fargate 上创建一个长期运行的进程/服务,订阅它想要广播到 SNS/Lambda 的每个突变。不理想,因为您必须自己管理和扩展该过程。
使用 DynamoDB Streams 作为 lambda 触发器。但是,DynamoDB 表更改事件的级别低于 GraphQL 突变事件,这假设您的唯一数据源是 DynamoDB,而 AppSync/GraphQL 可以插入许多其他数据源。
为每个将事件广播到 SNS/Lambda 的突变创建 lambda 解析器。对于简单地广播 SNS 事件,也许有一种聪明的方法可以使用管道解析器将可重用的解析器附加到每个突变......
我不确定 Amplify 框架如何为他们的@searchable 转换器提供动力,无论是#2 还是#3,或者其他什么,但似乎这是在同一个范围内(重新索引 Elasticsearch 中的数据以响应更新)。我确实记得听说你可以编写自己的变形金刚……也许可以编写自己的变形金刚@broadcasted,它还可以将所有突变事件广播到 SNS
我很惊讶我没有看到太多关于这个话题的讨论。如果有人有一些好主意,或者如果我以错误的方式思考这个问题,请告诉我。
解决方案
听起来您正试图根据传入的突变触发 lambda 函数。
就像您在选项 3 中提到的那样 - lambda 解析器可以实现此功能,但如果您想要调用一个发布到 SNS 作为执行步骤的通用 lambda - 那么您可以使用管道解析器。“通用” lambda 函数将成为管道中步骤的数据源,然后拥有用于 Dynamo/ES/Aurora Serverless 的常规解析器。
文档: https ://docs.aws.amazon.com/appsync/latest/devguide/pipeline-resolvers.html
推荐阅读
- vmware - ESXi 虚拟机快照创建 | PowerCLI
- c# - 保持控制台打开以在 C# dot.net 核心中侦听来自远程服务器的信息
- php - 密码属性填充不需要的用户名和密码
- ruby - Ruby正则表达式在@符号后获取用户名
- javascript - 对象数组的相等性,而不考虑按值索引而不是按引用
- go - 使用 goavro 创建的 Avro 文件将数值数据加载到 BigQuery
- google-api - 必须单击两个播放按钮才能在谷歌驱动器中启动视频
- javascript - 如何使用点击方法播放音频?
- android - Bluez 在 Android 上独立运行
- php - PHP extract() 函数的意外行为