AWS S3 Readstream returns 无数据

AWS S3 Readstream returns no data

我有一个将文件上传到 S3 的应用程序,并触发了一个事件以通过 Lambda 函数处理它们。

上传文件时,我可能会在 Cloud Watch 日志上看到函数执行,但是没有返回任何数据,也没有抛出任何错误并且从未调用 on('end') 处理程序。

正在处理的文件是.csv,我可以打开它们并手动检查内容。

对可能发生的事情有什么想法吗?

这是我的代码:

let es = require('event-stream');
let readStream = s3.getObject({
  Bucket: event.Records[0].s3.bucket.name,
  Key: event.Records[0].s3.object.key
}).createReadStream();

readStream
.pipe(es.split())
.pipe(es.mapSync(function (line) {
  console.log(line);
  processLine(line);
}))
.on('end', async () => {
  console.log('ON END');
  callback(null, 'OK');
})
.on('error', (err) => {
  console.error(JSON.stringify(err));
  callback(JSON.stringify(err));
})

当 Node.js Lambda 到达主线程末尾时,它会结束所有其他线程。

让您的处理程序 async 然后将最后一次调用承诺为

new Promise((resolve) => {
    readStream
    .pipe(es.split())
    .pipe(es.mapSync(function (line) {
      console.log(line);
      processLine(line);
    }))
    .on('end', async () => {
      console.log('ON END');
      callback(null, 'OK');
    })
    .on('error', (err) => {
      console.error(JSON.stringify(err));
      callback(JSON.stringify(err));
      resolve();
    })
}