在Body of API Gateway中添加JSON对象到Kinesis代理?

时间:2016-06-20 03:02:03

标签: amazon-web-services aws-api-gateway amazon-kinesis

我已将API网关配置为Kinesis代理,如Amazon’s tutorial中所述,用于将记录放入Kinesis流中。

集成请求的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请求有效负载进入。我们应该将uuid参数作为JSON对象密钥添加到Kinesis的数据有效负载中,但发送到Kinesis的编码数据不是JSON对象。

需要将参数uuid作为json-object键添加到kinesis的data-payload中。我面临的问题是,发送到kinesis的编码数据不是JSON对象。

我希望发送给Kinesis的数据应该是一个JSON对象:

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

但发送给Kinesis的实际数据如下:

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

如何从API网关向Kinesis发送JSON对象?我一直在试验$util.parseJson,但无法找到适用于此情景的解决方案。

1 个答案:

答案 0 :(得分:4)

您需要在速度模板中转义双引号

#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.amazon.com/thread.jspa?threadID=233060向kinesis发送数据的类似问题