AWS Lambda中的流转换导致结束后写入错误

Sat*_*tha 2 csv lambda node.js

我正在尝试使用Fastcsv nodejs包转换CSV文件。有趣的是,该代码段在我的系统上本地良好运行。但是,如果我尝试将其与AWS lambda程序集成,则会给出结束后写入错误。

var stream = fs.createReadStream(s3EventInfo.inputDownloadLoc)
.pipe(csv.parse({headers: true}))
//pipe the parsed input into a csv formatter
.pipe(csv.format({headers: true}))
//Using the transfrom function from the formatting stream
.transform(function(row, next){
    transformLine(row, next);
})
.pipe(fs.createWriteStream(s3EventInfo.outputFileLoc))
.on("end", function(){
    callback();
});
Run Code Online (Sandbox Code Playgroud)

这是aws日志中的错误。

Error: write after end
at writeAfterEnd (_stream_writable.js:133:12)
at PassThrough.Writable.write (_stream_writable.js:181:5)
at write (_stream_readable.js:602:24)
at flow (_stream_readable.js:611:7)
at _stream_readable.js:579:7
at process._tickDomainCallback (node.js:486:13)
Run Code Online (Sandbox Code Playgroud)

请帮助理解和解决该问题。

小智 5

Lambda函数被部署并按需运行,但是如果尚未销毁对同一lambda函数的其他调用,则可以在现有实例上运行它。您无法控制它,但是需要确保您的代码可以正确处理它。

如果您的流是在全局范围内定义的,那么您的问题是那些后续调用正在重用已经接收到“结束”事件的流。

您需要封装流,以便为每个调用实例化它们。