我一直在努力让以下代码正常工作。我使用的是无服务器框架,它在本地调用时工作得很好。我有一个完整的工作流程,在上传回S3之前,我将下载的文件进行处理。理想情况下,我想一行一行地处理,但首先要循序渐进!
我可以毫无问题地从S3下载一个小文件,但我正在处理的文件要大得多,不应该在内存中。
const AWS = require("aws-sdk");
const S3 = new AWS.S3();
const fs = require("fs");
module.exports = async function (event, context, callback) {
let destWriteStream = fs.createWriteStream("/tmp/a.csv");
let s3Input = { Bucket : "somebucket", Key : "somekey.csv" };
await new Promise((resolve, reject) => {
let s3Stream = S3.getObject(s3Input)
.createReadStream()
.on("close", function() {
resolve("/tmp/a.csv");
})
.pipe( destWriteStream );
}).then(d => {
console.log(d);
});
callback( null, "good" );
};
我尝试了很多不同的方法,包括Promise。我正在运行Node 8.10。它只是在作为Lambda运行时不起作用。它只是超时了。
我的问题是,我很少看到完整的例子。如有任何帮助,我们将不胜感激。
我设法做到了。Lambda在一些错误报告方面确实做得不好。
问题是,我下载的bucket来自与Lambda所在地区不同的地区。显然,在本地运行它时,这并没有什么区别。
所以。。。对于其他可能踏入这里的人。。。检查您的铲斗相对于Lambda地区的位置。