我正在尝试通过API网关代理的firehose在S3中保存数据。我创建了一个API网关端点,它使用AWS服务集成类型和putRecord操作来实现firehose。我有映射模板
{
"DeliveryStreamName": "test-stream",
"Records": [
#foreach($elem in $input.path('$.data'))
{
"Data": "$elem"
}
#if($foreach.hasNext),#end
#end
]
}
现在我用JSON
测试端点{
"data": [
{"ticker_symbol":"DemoAPIGTWY","sector":"FINANCIAL","change":-0.42,"price":50.43},{"ticker_symbol":"DemoAPIGTWY","sector":"FINANCIAL","change":-0.42,"price":50.43}
]
}
JSON被修改并在转换后显示如下
{ticker_symbol=DemoAPIGTWY, sector=FINANCIAL, change=-0.42, price=50.43}
:正在转换为=,这不是有效的JSON
不确定上述映射模板中是否有错误
答案 0 :(得分:0)
API Gateway将有效负载数据视为文本而不是Json,除非明确指定。
Kinesis还希望通过API网关代理时数据采用编码格式。
尝试以下代码,这应该有效,想知道为什么在映射模板中注释了for循环。
假设您没有遍历记录集,以下解决方案应该适合您。
{
"DeliveryStreamName": "test-stream",
"Record": {
"Data": "$util.base64Encode($input.json('$.Data'))Cg=="
}
}
谢谢&问候, Srivignesh KN