amazon-web-services - AppSync 始终以“获取失败”作为响应,并且日志不显示任何内容
问题描述
我有一个连接到 DynamoDB 表的 AppSync API,并且两者都使用 CF 模板进行部署,但是当我向特定解析器发出请求时,它总是挂起,然后因“无法获取”而失败。我已经使用 IAM Policy Simulator 验证了连接到 API 的角色足以运行 requestMappingTemplate 中指定的扫描:
{
"version": "2017-02-28",
"operation": "Scan",
"limit": 500
}
我还使用控制台中的虚拟数据验证了以下 responseMappingTemplate 是否有效:
#set($uniqueStates = [])
#foreach($item in $ctx.result.items)
#set($found = false)
#foreach($state in $uniqueStates)
#if(!$found && $item.state == $state.name)
#set($found = true)
$util.qr($state.institutions.add({"name": "$item.name", "id": "$item.id"}))
#end
#end
#if(!$found)
$util.qr($uniqueStates.add({"name":"$item.state","institutions":[{"name": "$item.name", "id": "$item.id"}]}))
#end
#end
{
"states": $util.toJson($uniqueStates)
}
我还按照说明设置日志记录角色并将其附加到 API。它将成功地为可通过 cloudwatch 访问的自省查询创建日志,并将日志级别设置为 ERROR。
当我转到我的 API 的 AppSync 控制台时,所有设置都按原样显示,但是当我从控制台(或其他任何地方)执行有效查询(由查询构建控制台中的便捷工具验证)时,它挂起并响应“获取失败”。日志部分也没有显示任何内容。我正在撕扯我的头发试图找出原因。提前感谢您的帮助!
解决方案
事实证明,我的问题是我从响应映射模板返回的数据与架构不匹配,因此它静默失败并导致超时错误。很容易修复,但很难诊断。我经历的调试过程是创建一个专用于一个示例端点的新 AppSync API,并逐步使其与我为失败的端点所拥有的一切相同。