首页 > 解决方案 > API Gateway 中 AWS Firehose PutRecordBatch 的映射模板应该是什么样的?

问题描述

我已经成功设置了一个 API,它使用 PutRecord 使用这些说明(https://aws.mannem.me/?p=1152 -注意:它说不安全但我仍然点击了,因为我需要它)。

我正在尝试为 PutRecordBatch 设置一个 API(基本上允许一次写入多个记录),但我不断收到

{“__type”:“序列化异常”}

根据数小时的研究,当传入的 API 调用格式与集成请求中记录的映射模板不匹配时,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"
    }]
}

标签: amazon-web-servicesaws-api-gatewayamazon-kinesis-firehose

解决方案


太笨了,但是映射模板有一个错误:在末尾有一个额外的逗号

"数据": "$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
        ]
}

推荐阅读