AppSync Dynamodb 解析器

Posted

技术标签:

【中文标题】AppSync Dynamodb 解析器【英文标题】:AppSync Dynamodb Resolvers 【发布时间】:2021-07-18 16:47:11 【问题描述】:

我正在尝试学习如何使用 AppSync 及其 DynamoDB 集成。

我已成功创建 AppSync GraphQL API 并将解析器链接到主键上的 getter,并认为我了解正在发生的事情。但是,我根本无法让 putItem 解析器工作,并且正在努力寻找一种有用的方法来调试逻辑。

这里有一个 cdk 存储库,它将部署应用程序。第 133-145 行有一个手写模式,我认为它应该可以工作,但是会收到错误

一个或多个参数值无效:关键 food_name 的类型不匹配预期:S 实际:NULL(服务:DynamoDb,状态代码:400

我也尝试将表达式用引号括起来,但收到错误。 我应该从这里去哪里?

示例数据创建一个带有键的表

    食物名称 科学名称 群 子组

以 food_name 作为主键。

https://github.com/AG-Labs/AppSyncTask

今天我尝试将列表解析器重新实现为


    "version" : "2017-02-28",
    "operation" : "Scan",
    ## Add 'limit' and 'nextToken' arguments to this field in your schema to implement pagination. **
    "limit": $util.defaultIfNull($ctx.args.limit, 20),
    "nextToken": $util.toJson($util.defaultIfNullOrBlank($ctx.args.nextToken, null))

响应映射为

$util.toJson($ctx.result.items)

在 cloud watch 中,我可以看到日志类型 ResponseMapping 下的结果列表(虽然没有正确过滤,但我现在将忽略它)但这些不会返回给查询器。结果很简单


  "data": 
    "listGenericFoods": 
      "items": null
    
  

我不明白这是哪里出了问题。

【问题讨论】:

架构文件只有 133 行。检查你是否推送。 你是说应该有更多吗?架构最初是根据为应用同步提供的单一类型创建的。 get 的解析器不是其他的,所以我认为这与它们的实施方式有关。 【参考方案1】:

问题在于解析器是嵌套的。

编写手写架构解决了该问题,但导致 API 较差。后退几步,将从头开始慢慢添加更多解析器。

CloudWatch Logs 开启后会有所帮助,但仍需要对解析器进行大量更改并重试。

【讨论】:

以上是关于AppSync Dynamodb 解析器的主要内容,如果未能解决你的问题,请参考以下文章

AWS Appsync 一个 dynamodb 解析器中的多个 dynamodb 请求

用于过滤用例的 AppSync DynamoDB 解析器

如何使用 Appsync 中的解析器获取 dynamodb 中存在的记录总数

用于过滤用例的AppSync DynamoDB解析器

AWS appsync 查询解析器

AWS AppSync 解析器内部超时配置