【问题标题】:csv files from S3 to Dynamodb with LAMBDA function使用 LAMBDA 函数从 S3 到 Dynamodb 的 csv 文件
【发布时间】:2018-08-15 19:50:29
【问题描述】:

我在 S3 中上传了许多 csv 文件,我想将它们发送到 dynamodb(json 格式)我如何使用 lambda 函数来做到这一点,或者是否有任何其他解决方案

【问题讨论】:

    标签: amazon-s3 aws-lambda amazon-dynamodb


    【解决方案1】:

    只需添加我使用过的这个解决方案。

    首先创建您的 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);
            });
        };

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-28
      • 2021-03-01
      • 2022-01-14
      • 2016-02-17
      • 2021-04-05
      • 2018-09-13
      • 1970-01-01
      • 2020-01-02
      相关资源
      最近更新 更多