amazon-web-services - 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"
}]
}
解决方案
太笨了,但是映射模板有一个错误:在末尾有一个额外的逗号
"数据": "$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
]
}
推荐阅读
- python - 如何在水平栏中显示数据的频率?
- java - 如何在 Windows 10 中为 Java 中的方法 SerialPort.getCommPort() 获取串行端口的名称
- ember.js - 如何在 ember js 中一次只打开一个菜单项?
- api - 如何在 Airflow DAG 上自动获取 API 令牌
- bash - bash 可以检索脚本中的整个命令吗?
- javascript - 为什么我需要这个。关键字引用同名变量?
- python - 解码 Decimal 类型的 parquet 最小/最大统计信息
- javascript - Vue 3, call $emit on variable change
- javascript - 如何使用 JavaScript 将 div 的高度转换为 100% 值
- swift - 如何在结果中的 .map 函数内返回失败