使用 AppSync 和 DynamoDB 运行 Lambda 函数以进行服务器端验证

Ilj*_*lja 6 amazon-web-services amazon-dynamodb aws-lambda aws-appsync aws-amplify

我最近很喜欢与AWS Amplify合作,它基于定义的架构为 GraphQL 查询生成代码非常出色。

我遇到了一个定义自定义逻辑/验证服务器端的复杂问题。在袋子外面的AppSync(部分负责扩增出GraphQL API)生成您的架构解析器和DynamoDB表。解析器是使用Apache Velocity模板语言创建的,如果您不熟悉它,我认为它有点学习曲线。

此外,这些解析器是由 Amplify cli 自动生成的。我不确定在 AppSync 控制台或本地编辑它们是否有意义,因为每次我们推送 api 更改时,它们都会再次自动生成?

除此之外,这些自动生成的解析器实际上在将类型模型链接在一起、启用搜索和身份验证检查方面实现了很多,我真的不想接触它们,因为自动生成支持的开发速度是疯狂的。

因此,引入我的自定义逻辑的其他解决方案似乎是 Lambda 函数,用于侦听关联 DynamoDB 表的创建/更新事件。

我想我可以按照下面演示的方式进行设置,基本上允许用户正常使用 GraphQL api,并且当需要服务器验证的操作在 lambda 中对其做出反应时?

例如玩家将物品添加到他们的库存中,我们触发 lambda 函数来检查玩家之前是否拥有该物品,如果没有购买,我们验证物品数据并从玩家表中减去其成本的金币。我认为这很好用,但我的担忧是

  1. 我们允许先将未经验证的数据写入数据库(尽管它已通过 graphql 类型系统和身份验证检查进行验证。)
  2. 涉及 Lambda 的额外成本(在我看来,为了节省时间和使用 NodeJS 而不是 Apache Velocity 来定义语言的能力,这是值得的)

我还缺少其他东西吗?

在此处输入图片说明

因此 lambda 将在幕后进行验证,我们假设这里的大多数用户都是优秀的参与者,并且他们传递给 GraphQL api 的数据是正确的,因为他们使用我们的客户端。

如果数据是意外的(坏演员),lambda 会做出反应并禁止用户。

这个解决方案是否可行/通用,还有其他选择吗?