如何使用AWS Lambda(javascript)下载大型S3文件

时间:2018-07-30 17:53:28

标签: javascript amazon-web-services amazon-s3 aws-lambda

我一直在努力使以下代码正常工作。我正在使用无服务器框架,当在本地调用时,它可以很好地工作。我有一个完整的工作流程,在下载回文件并上传到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的方法。我正在运行节点8.10。作为Lambda运行时,它只是不起作用。它只是超时。

我的问题是,我看不到完整的示例。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我设法使它正常工作。 Lambda,确实在某些错误报告方面做得不好。

问题是我从中下载的存储桶与Lambda所在的区域不同。显然,在本地运行该存储桶没有什么影响。

所以...对于可能会踩到这里的其他人...检查您的铲斗相对于Lambda区域的位置。