我遵循本教程将数据从我的API网关推送到一个Kinesis流:
http://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-kinesis.html#api-gateway-get-and-add-records-to-stream
我的身体映射模板设置为.
{
"StreamName": "my-stream-name",
"Data": "$util.base64Encode($input.path('$.Data'))",
"PartitionKey": "$input.path('$.PartitionKey')"
}...and已经在API测试的请求主体中放置了以下内容.
{
"Data": {
"Foo": "A",
"Bar": "B"
},
"PartitionKey": "some key"
}然后,我创建了一个Lambda函数,它对相同的Kinesis设置了一个触发器。然而,我正在努力解码/反序列化来自Kinesis的记录。
exports.handler = (event, context, callback) => {
event.Records.forEach(function(record) {
let payload = JSON.parse(Buffer(record.kinesis.data, 'base64').toString('ascii'))
});
};数据似乎正在以非JSON格式序列化为Kinesis。record.kinesis.data在forEach循环中的值是
e0Zvbz1BLCBCYXI9Qn0=
...which时通过缓冲区(record.kinesis.data,'base64').toString('ascii')
返回为
{Foo=A,Bar=B}
不
{"Foo":"A","Bar":"B"}
主要目标显然是在我可以说是console.log(payload.Foo)的状态下获得有效载荷。
任何关于我应该做什么/寻找什么的提示都将不胜感激。
发布于 2017-04-21 11:05:05
对其他人来说
我让我的身体映射模板设置为.
{
"StreamName": "my-stream-name",
"Data": "$util.base64Encode($input.path('$.Data'))",
"PartitionKey": "$input.path('$.PartitionKey')"
}现在改为处理json..。
{
"StreamName": "my-stream-name",
"Data": "$util.base64Encode($input.json('$.Data'))",
"PartitionKey": "$input.path('$.PartitionKey')"
}在哪里..。
($input.json('$.Data'))是改变:)
https://stackoverflow.com/questions/43524008
复制相似问题