我在哪里可以登录和在AWS AppSync中调试Velocity Template Language(VTL)?

时间:2018-05-30 15:24:37

标签: amazon-web-services aws-appsync

  1. 是否有任何简单的方法来记录或调试来自请求映射模板的VTL&响应映射模板而不是发送查询& 突变来调试&日志?

  2. 此外,是否有任何游乐场可以检查&像在Web控制台中使用JavaScript一样使用VTL进行游戏?

  3. 我们可以脱机使用AWS AppSync吗?检查VTL中写的所有内容是否按预期工作?

3 个答案:

答案 0 :(得分:4)

一种非常讨厌的记录和调试方法是在响应映射中使用验证

$util.validate(false, $util.time.nowISO8601().substring(0, 10) )

答案 1 :(得分:3)

以下是我在 VTL 解析器中记录值的方式:

在您的请求或响应模板中添加“$util.error”语句,然后进行 graphql 调用。

例如,我想查看作为输入传递给解析器的参数是什么,因此我在模板的开头添加了 $util.error 语句。所以,我的模板现在是:

$util.error("Test Error", $util.toJson($ctx))
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "id": $util.dynamodb.toDynamoDBJson($ctx.arguments.user.id)
    },
    "attributeValues": {
        "name": $util.dynamodb.toDynamoDBJson($ctx.arguments.user.name)
    }
}

然后从 AWS AppSync 控制台的“查询”部分,我运行了以下突变:

mutation MyMutation {
  addUser(user: {id: "002", name:"Rick Sanchez"}) {
    id
    name
  }
}

这显示了我的解析器的日志结果如下:

{
  "data": null,
  "errors": [
    {
      "path": [
        "addUser"
      ],
      "data": null,
      "errorType": "{\"arguments\":{\"user\":{\"id\":\"002\",\"name\":\"Rick Sanchez\"}},\"identity\":null,\"source\":null,\"result\":null,\"request\":{\"headers\":{\"x-forwarded-for\":\"112.133.236.59, 130.176.75.151\",\"sec-ch-ua-mobile\":\"?0\",\"cloudfront-viewer-country\":\"IN\",\"cloudfront-is-tablet-viewer\":\"false\",\"via\":\"2.0 a691085135305af276cea0859fd6b129.cloudfront.net (CloudFront)\",\"cloudfront-forwarded-proto\":\"https\",\"origin\":\"https://console.aws.amazon.com\",\"content-length\":\"223\",\"accept-language\":\"en-GB,en;q=0.9,en-US;q=0.8\",\"host\":\"raxua52myfaotgiqzkto2rzqdy.appsync-api.us-east-1.amazonaws.com\",\"x-forwarded-proto\":\"https\",\"user-agent\":\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.66\",\"accept\":\"*/*\",\"cloudfront-is-mobile-viewer\":\"false\",\"cloudfront-is-smarttv-viewer\":\"false\",\"accept-encoding\":\"gzip, deflate, br\",\"referer\":\"https://console.aws.amazon.com/\",\"x-api-key\":\"api-key-has-been-edited-out\",\"content-type\":\"application/json\",\"sec-fetch-mode\":\"cors\",\"x-amz-cf-id\":\"AvTMLvtxRq9M8J8XntvkDj322SZa06Fjtyhpf_fSXd-GmHs2UeomDg==\",\"x-amzn-trace-id\":\"Root=1-5fee036a-13f9ff472ba6a1211d499b8b\",\"sec-fetch-dest\":\"empty\",\"x-amz-user-agent\":\"AWS-Console-AppSync/\",\"cloudfront-is-desktop-viewer\":\"true\",\"sec-fetch-site\":\"cross-site\",\"sec-ch-ua\":\"\\\"Chromium\\\";v=\\\"87\\\", \\\" Not;A Brand\\\";v=\\\"99\\\", \\\"Microsoft Edge\\\";v=\\\"87\\\"\",\"x-forwarded-port\":\"443\"}},\"info\":{\"fieldName\":\"addUser\",\"parentTypeName\":\"Mutation\",\"variables\":{}},\"error\":null,\"prev\":null,\"stash\":{},\"outErrors\":[]}",
      "errorInfo": null,
      "locations": [
        {
          "line": 9,
          "column": 3,
          "sourceName": null
        }
      ],
      "message": "Test Error"
    }
  ]
}

答案 2 :(得分:0)

您的3个问题中的每一个的答案如下:

  1. 要对测试请求/响应映射模板进行单元化,可以使用此博客文章(https://mechanicalrock.github.io/2020/04/27/ensuring-resolvers-aren't-rejected.html)中描述的方法。
  2. AWS AppSync控制台中存在一个VTL实验平台,您可以在其中编辑和测试解析器的VTL。
  3. Amplify框架具有模拟功能,可模拟AppSync,AppSync VTL环境和DynamoDB(使用DynamoDB Local)。这样您就可以在本地执行e2e测试。