我可以触发 Lambda 函数或 SNS 事件以响应 AppSync GraphQL 突变吗?

Can I trigger a Lambda function or SNS event in response to an AppSync GraphQL Mutation?

AWS AppSync/GraphQL 订阅与 AWS Amplify 相结合听起来很棒,因为开箱即用,您可以为所有客户订阅架构中指定的高级域事件。

虽然这似乎是一个自然的扩展,但应该有一种方法可以将所有这些事件广播到 lambda 或 SNS 等服务以在内部对这些事件做出反应。也许您想记录事件、重新索引或聚合更新的数据,或者向用户发送电子邮件或推送通知。就像 DynamoDB Streams 允许您触发 lambda 以更新 table。有人知道实现此目标的好方法吗?

lambda 似乎没有 AppSync 触发源,但似乎有几种方法可以做到这一点:

  1. 在 ECS/Fargate 上创建一个 long-运行 process/service 订阅它想要广播到 SNS/Lambda 的每个突变。不太理想,因为您必须自己管理和扩展该流程。

  2. 使用 DynamoDB Streams 作为 lambda 触发器。但是,DynamoDB table 更改事件的级别低于 GraphQL 突变事件,并且这是假设您唯一的数据源是 DynamoDB,而 AppSync/GraphQL 可以插入许多其他数据源。

  3. 为每个也将事件广播到 SNS/Lambda 的突变创建 lambda 解析器。对于简单地广播 SNS 事件,也许有一种聪明的方法可以使用管道解析器将可重用的解析器附加到每个突变...

我不确定 Amplify 框架如何为他们的@searchable 转换器提供动力,无论是#2 还是#3,还是其他东西,但它似乎在同一个球场(在 Elasticsearch 中重新索引数据响应更新)。我确实记得听说过您可以编写自己的转换器……也许可以编写自己的转换器@broadcasted,它还可以将所有突变事件广播到 SNS

我很惊讶我没有看到太多关于这个话题的讨论。如果有人有什么好的想法,或者如果我以错误的方式思考这个问题,请告诉我。

听起来您正试图根据传入的突变触发 lambda 函数。

就像您在选项 3 中提到的那样 - lambda 解析器可以实现此功能,但如果您想做的是调用一个发布到 SNS 的公共 lambda 作为执行中的一个步骤 - 那么您可以使用管道解析器。其中 'common' lambda 函数将成为您管道中步骤的数据源,然后拥有您将用于 Dynamo/ES/Aurora 无服务器的常规解析器。

文档: https://docs.aws.amazon.com/appsync/latest/devguide/pipeline-resolvers.html