NodeJS csv数据转储到s3对象

时间:2019-03-17 11:12:02

标签: node.js amazon-s3 aws-lambda

我是AWS,JavaScript的初学者,我正在尝试使用AWS Lambda函数中的以下代码从oracle数据库中获取数据。

 let conn = await this.getConnection(userName, password, connectString);
 let results = await conn.execute(query, {}, {});
 let data = results.rows.map(el => `${el}`);
 console.log(data); 

这在控制台上提供了以下输出

[ "TEST_SESSION_0,121,High,Warning,7",
"TEST_SESSION_2,122,High,Error,11",
"TEST_SESSION_3,123,Low,Error,431,
"TEST_SESSION_4, ASMT_,103,Low,Fatal,10" ]

现在,我的目标是将该输出转换为CSV数据流,然后上传到S3存储桶对象output.csv中以进行进一步处理。我在下面尝试转换成 CSV,但是在使用AWS开发工具包和必需的NPM模块将其连接回S3时遇到问题,当我测试以下代码时,我没有收到任何错误,但同时没有看到 数据上传到S3。不确定我在哪里做错了,不胜感激。

stringify(results.rows, function(err, output){
  if(err){
    console.log('some error occured '+ err);
  } else {
     console.log(output); //gives me below output
//TEST_SESSION_0,121,High,Warning,7
//TEST_SESSION_2,122,High,Error,11
//TEST_SESSION_3,123,Low,Error,431
//TEST_SESSION_4, ASMT_,103,Low,Fatal,10

下面的代码是将CSV输出上传到S3对象

     var param = {
       Bucket: 'Test-Bucket',
       Key: 'output.csv',
      Body: new Buffer(fs.createWriteStream(output)) //can i pass the csv data that i captured above in "output"?
      };  
    s3bucket.putObject(param, function(err, output){
   if(err) console.log(err);
  else console.log(output);
});
}
})

1 个答案:

答案 0 :(得分:0)

我将首先分离出S3上传的代码,然后单独处理该部分-尝试使其在存储桶中创建一个文件,其中包含来自字符串的文本。

putObject函数期望将Buffer作为Body参数。要从字符串构造此字符串,可以使用Buffer.from方法:

var AWS = require('aws-sdk');

var output = 'This is a test';
var myBody = Buffer.from(output);

var param = {
  Bucket: 'Test-Bucket',
  Key: 'output.csv',
  Body: myBody
};

var s3bucket = new AWS.S3({ signatureVersion: 'v2' });
s3bucket.putObject(param, function(err, output) {
  if(err) {
    console.error(err);
  } else {
    console.log(output)
  }
});

一旦该部分正常工作,请将其插入其他代码并将output更改为CSV文件的内容。

NB ,您需要设置以下环境变量:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY