2017-04-20 7 views
1

私はキネシスストリームに私のAPI Gatewayからデータをプッシュするために、このチュートリアルを次のようだ:キネシス - 解析データ

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

次に、同じ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)

を言うことができる状態にするペイロードを取得することは明らかです

私は何をすべきか/探しているべきであるかについてのヒントは感謝します。

{ 
    "StreamName": "my-stream-name", 
    "Data": "$util.base64Encode($input.path('$.Data'))", 
    "PartitionKey": "$input.path('$.PartitionKey')" 
} 

今すぐJSONを扱うように変更.....と私は私のボディマッピングテンプレートのセットアップを持っていたそこに誰

については

答えて

0

....

{ 
    "StreamName": "my-stream-name", 
    "Data": "$util.base64Encode($input.json('$.Data'))", 
    "PartitionKey": "$input.path('$.PartitionKey')" 
} 

どこに...

($input.json('$.Data')) 

は変更です:)