将API网关主体中的JSON对象添加到Kinesis代理



我已经将API网关配置为亚马逊教程中所述的运动式代理,以将记录放入运动流中。

集成请求的HTTP标头是:

  • stream-name映射到method.request.header.stream-name
  • partition-key映射到method.request.header.partition-key
  • Content-Type映射到application/x-amz-json-1.1

内容类型application/json的车身映射模板看起来像:

{
    "StreamName": "$input.params('stream-name')",
    "PartitionKey": "$input.params('partition-key')",
    "Data": "$util.base64Encode({"rows": "$input.json('$')", "uuid": "$input.params('uuid')"})"
}

数据作为JSON-Request有效载荷。我们应该将uuid参数作为JSON-Object键添加到Kinesis的数据付款中,但是发送到Kinesis的编码数据不是JSON对象。

需要将参数uuid作为JSON-Object键添加到Kinesis的数据付款中。我面临的问题是,发送给Kinesis的编码数据不是JSON对象。

我期望将数据发送到kinesis应该是一个JSON对象:

{
 "rows": [{"id": 1, "name": "a"}, {"id": 2, "name": "b"}],
 "uuid": "0001"
}

但是发送给运动式的实际数据看起来像:

{
 rows=[{"id": 1, "name": "a"}, {"id": 2, "name": "b"}],
 uuid=0001
}

如何将JSON对象从API Gateway发送到Kinesis?我一直在尝试$util.parseJson,但找不到这种情况的解决方案。

您需要在速度模板中逃脱双引号

#set($event =  "{
  ""rows"": ""$input.json('$')"",
  ""uuid"": ""$input.params('uuid')"",
}")
{
   "StreamName": "$input.params('stream-name')",  
   "Data": "$util.base64Encode($event)",  
   "PartitionKey": "$input.params('partition-key')"
}

这是AWS论坛上的类似问题,用于通过API网关https://forums.aws.aws.amazon.com/thread.jspa?threadid=233060

相关内容

  • 没有找到相关文章

最新更新