AWS Dynamodb aggregation的处理问题
方案1:DynamoDB Stream + Lambda方法
参考Building NoSQL Database Triggers with Amazon DynamoDB and AWS Lambda: https://amazonaws-china.com/cn/blogs/compute/619/
var AWS = require('aws-sdk'); var sns = new AWS.SNS(); exports.handler = function(event, context) {processRecord(context, 0, event.Records);} // Process each DynamoDB record function processRecord(context, index, records) { if (index == records.length) { context.succeed("Processed " + records.length + " records."); return; } record = records[index]; console.log("ID: " + record.eventID + "; Event: " + record.eventName); console.log('DynamoDB Record: %j', record.dynamodb); // Assumes SSN# is only set only on row creation if ((record.eventName != "INSERT") || valid(record)) processRecord(context, index+1, records); else { console.log('Invalid SSN # detected'); var name = record.dynamodb.Keys.Name.S; console.log('name: ' + name); var ssn = record.dynamodb.Keys.SocialSecurityNumber.S; console.log('ssn: ' + ssn); var message = 'Invalid SSN# Detected: Customer ' + name + ' had SSN field of ' + ssn + '.'; console.log('Message to send: ' + message); var params = { Message: message, TopicArn: 'YOUR BadSSNNumbers SNS ARN GOES HERE' }; sns.publish(params, function(err, data) { if (err) console.log(err, err.stack); else console.log('malformed SSN message sent successfully'); processRecord(context, index+1, records); }); } } // Social security numbers must be in one of two forms: nnn-nn-nnnn or nnnnnnnnn. function valid(record) { var SSN = record.dynamodb.Keys.SocialSecurityNumber.S; if (SSN.length != 9 && SSN.length != 11) return false; if (SSN.length == 9) { for (var indx in SSN) if (!isDigit(SSN[indx])) return false; return true; } else { return isDigit(SSN[0]) && isDigit(SSN[1]) && isDigit(SSN[2]) && SSN[3] == '-' && isDigit(SSN[4]) && isDigit(SSN[5]) && SSN[6] == '-' && isDigit(SSN[7]) && isDigit(SSN[8]) && isDigit(SSN[9]) && isDigit(SSN[10]); } } function isDigit(c) {return c >= '0' && c <= '9';}
Reference Page:
aws time series process: https://media.amazonwebservices.com/architecturecenter/AWS_ac_ra_timeseriesprocessing_16.pdf
lambda-dynamodb-aggregator: https://github.com/kojiisd/lambda-dynamodb-aggregator
DynamoDB Design Patterns and Best Practices: http://airjd.com/view/ilhadir5000agkt#1