AWS API网关响应主体模板映射(foreach)

时间:2018-02-20 19:56:08

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

我正在尝试通过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

不确定上述映射模板中是否有错误

1 个答案:

答案 0 :(得分:0)

API Gateway将有效负载数据视为文本而不是Json,除非明确指定。

Kinesis还希望通过API网关代理时数据采用编码格式。

尝试以下代码,这应该有效,想知道为什么在映射模板中注释了for循环。

假设您没有遍历记录集,以下解决方案应该适合您。

    {
      "DeliveryStreamName": "test-stream",
      "Record": {
      "Data": "$util.base64Encode($input.json('$.Data'))Cg=="
                }
    }

谢谢&问候, Srivignesh KN