API Gateway中的AWS Firehose PutRecordBatch的映射模板应该是什么样的?

时间:2019-03-12 03:57:24

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

我已按照以下说明,使用PutRecord成功设置了具有Kinesis Firehose与AWS API Gateway集成的API,并使用PutRecord(https://aws.mannem.me/?p=1152- note :它表示不安全,但是自从我点击以来需要它。

我正在尝试为PutRecordBatch设置API(本质上允许一次写入多个记录),但是我一直在获取

  

{       “ __type”:“ SerializationException”}

根据研究时间,当传入的API调用格式与Integration Request中注明的映射模板不匹配时,API网关会引发该错误。我正在努力弄清楚如何修复我的映射模板。

这是我的映射模板:

{
    "StreamName": "$input.path('DeliveryStreamName')",
    "Records": [
           #foreach($elem in $input.path('$.Records'))
              {
                "Data": "$util.base64Encode($elem.Data)",
              }#if($foreach.hasNext),#end
            #end
        ]
}

这是我要发送的测试数据:

{
    "DeliveryStreamName": "test",
    "Records": [{
        "Data": "SampleDataStringToFirehose"
    },
    {
        "Data": "SampleDataStringToFirehose2"
    }]
}

1 个答案:

答案 0 :(得分:0)

太傻了,但是映射模板有一个错误,在末尾有一个多余的逗号

  

“数据”:“ $ util.base64Encode($ elem.Data)”,

造成问题的原因。下面是正确的版本:

{
    "DeliveryStreamName": "$input.path('$.DeliveryStreamName')",
    "Records": [
           #foreach($elem in $input.path('$.Records'))
              {
                "Data": "$util.base64Encode($elem.Data)"
              }#if($foreach.hasNext),#end
            #end
        ]
}