node.js - NodeJS csv 数据转储到 s3 对象

标签 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 SDK 和所需的 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);
});
}
})

最佳答案

我首先会分离出 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)
  }
});

一旦该部分完美运行,请将其插入其他代码并将输出更改为 CSV 文件的内容。

注意您将需要设置以下环境变量:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

关于node.js - NodeJS csv 数据转储到 s3 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55206407/

相关文章:

python - 如何检查 AWS S3 存储桶是否存在?

node.js - 如何将 JPG 上传到 AWS Lambda (NodeJS)

java - 使用 aws lambda native 读取文本文件

go - 如何在 Go 中创建 AWS Lambda 来处理多个事件

node.js - 如何编写具有 Node 依赖性的内联 lambda 代码?

javascript - 在函数中的 Promise 之间保留变量?

node.js - 将 Node 模块导出为唯一实例

node.js - Angular -ng : command not found

javascript - 字符串化 JSON 内部对象的最佳实践

amazon-web-services - Amazon CloudFront 和 HTTPsL 我该怎么办?