DarkSun
DarkSun

Reputation: 449

Amazon Lambda won't write to DynamoDB

I am streaming data to Amazon Kinesis, and I use Amazon Lambda to handle data and write it to DynamoDB.

My Lambda code:

var doc = require('dynamodb-doc');
var dynamo = new doc.DynamoDB();

exports.handler = function(event, context) {
    //console.log('Received event:', JSON.stringify(event, null, 2));
    event.Records.forEach(function(record) {
    // Kinesis data is base64 encoded so decode here

    var payload = new Buffer(record.kinesis.data, 'base64').toString('ascii');
    console.log('Decoded payload:', payload);

    var tableName = "_events";
    var datetime = new Date().getTime().toString();

    dynamo.putItem({
        "TableName": tableName,
        "Item" : { 
            "eventID"   : record["eventID"],
            "eventName" : payload
        }
    }, function(err, data) {
        if (err) {
            console.log("dynamodb error: " + err);
            context.done('error putting item into dynamodb failed: '+err);
        }
        else {
            console.log('great success: '+JSON.stringify(data, null, '  '));
            context.succeed('K THX BY');
        }
    });

});
// context.succeed("Successfully processed " + event.Records.length + " records.");
};

When I run test, data is successfully saved to DynamoDB. But when I stream the real data, it doesn't happen, while logs show that data was received by lambda function. Also console.log() function doesn't work in putItem() block, so I have no idea how to debug this problem.

Upvotes: 3

Views: 1314

Answers (1)

DarkSun
DarkSun

Reputation: 449

The problems were: 1. I didn't set the correct permissions 2. I just did't wait enough so the data could be processed by the lambda function.

Upvotes: 3

Related Questions