【发布时间】:2018-08-15 19:50:29
【问题描述】:
我在 S3 中上传了许多 csv 文件,我想将它们发送到 dynamodb(json 格式)我如何使用 lambda 函数来做到这一点,或者是否有任何其他解决方案
【问题讨论】:
标签: amazon-s3 aws-lambda amazon-dynamodb
我在 S3 中上传了许多 csv 文件,我想将它们发送到 dynamodb(json 格式)我如何使用 lambda 函数来做到这一点,或者是否有任何其他解决方案
【问题讨论】:
标签: amazon-s3 aws-lambda amazon-dynamodb
只需添加我使用过的这个解决方案。
首先创建您的 Lambda 函数,并为其授予对您的 S3 存储桶和 DynamoBD 的正确权限。
Lambda 函数 index.js
const doc = require('dynamodb-doc');
const dynamo = new doc.DynamoDB();
const AWS = require('aws-sdk');
const S3 = new AWS.S3({
maxRetries: 0,
region: 'SET_YOUR_REGION',
});
const insertSuccess = 0;
const insertErrors = 0;
function dynamoResultCallback(err, data) {
if (err) {
insertErrors++;
console.log("Insert Error: \n" + err);
//console.log(err, err.stack); // an error occurred
} else {
insertSuccess++;
}
}
//CONVERT TO JSON FUNCTION
function csvJSON(csv){
var lines=csv.split('\r');
for(var i = 0; i<lines.length; i++){
lines[i] = lines[i].replace(/\s/,'');//delete all blanks
}
var result = [];
var headers=lines[0].split(",");
for(var i=1;i<lines.length;i++){
var obj = {};
var currentline=lines[i].split(",");
for(var j=0;j<headers.length;j++){
//IF OBJECT KEY HAS NO VALUE,
//REMOVE IT OR DYNAMO DB WILL ERROR ON THAT OBJECT
if(currentline[j]!==''){
obj[headers[j].toString()] = currentline[j];
}
}
result.push(obj);
}
return result; //JavaScript object
// JSON.stringify(result); //JSON
}
exports.handler = (event, context, callback) => {
var srcBucket = event.Records[0].s3.bucket.name;
var srcKey = event.Records[0].s3.object.key;
S3.getObject({
Bucket: srcBucket,
Key: srcKey,
}, function(err, data) {
if (err !== null) {
return callback(err, null);
}
var fileData = data.Body.toString('utf-8');
var obj = csvJSON(fileData);
var string = JSON.stringify(obj);
console.log(string);
for (var i = 0; i < obj.length; i++) {
console.log('adding '+ JSON.stringify(obj[i]));
var params = {
Item: obj[i],
TableName: "YOUR_TABLE_NAME"
};
dynamo.putItem(params, dynamoResultCallback);
}
return callback(null, data);
});
};
【讨论】: