2017-04-20 53 views
1

我下面這個教程從我的API網關將數據推送到室壁運動流:室壁運動與λ - 解析數據

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')" 
} 

...並放在一個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。在foreach循環爲record.kinesis.data值是

e0Zvbz1BLCBCYXI9Qn0 =

...其中,當通過推緩衝液(record.kinesis.data, 'BASE64')。的toString( 'ASCII')

返回如

{美孚= A,酒吧= B}

{ 「富」: 「A」, 「酒吧」: 「B」}

主要目的顯然的狀態下,我可以說console.log(payload.Foo)

得到有效載荷

任何提示,我應該做什麼/尋找將不勝感激。

回答

0

爲別人那裏

我有我的身體映射模板設置爲.....

{ 
    "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')) 

是變化:)