从文件夹内部将文件保存到 lambda 中的 /tmp

Saving file to /tmp in lambda from inside of a folder

我有一个使用lambda下载和上传文件到s3的任务,场景是这样的

downloadFilesuploadFiles fn 都在 utils/s3.js 里面 utils/s3.js 在 lambda

的根目录 (var/task/) 里面

这是我的 utils/s3.js 下载文件 fn

exports.downloadFiles = async () => {
  try{
    const location = path.join( __dirname , `../tmp/text.txt`);
    console.log(location); // prints /var/task/tmp/text.txt
    console.log(__dirname); // prints /var/task/utils
    const params = {
      Bucket: 'bucket1',
      Key: `request/text.txt`
    };

    const { Body } = await s3.getObject(params).promise();
    fs.writeFileSync(location, Body);
    return;
  }catch(e){
    throw new Error(e.message);
  }
};

现在有两种情况,

现在我已经阅读了 Whosebug 上的大部分答案,我知道我应该将文件保存到 /tmp/filename, 但是为什么我做了同样的事情却不起作用,我哪里错了?

正如一位评论者所说,如果您不对文件本身做任何事情,最好只使用 S3 API 复制对象而不是下载并重新上传它。

相关文档可以在这里找到:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#copyObject-property

示例:

var params = {
  CopySource: "/<source-bucket>/<source-key>", 
  Bucket: "<destination-bucket>",
  Key: "<destination-key>"
};

s3.copyObject(params, function(err, data) {
   if (err) console.log(err, err.stack); 
   else     console.log(data);
});

或者,如果您想使用承诺,这也应该有效:

var params = {
  CopySource: "/<source-bucket>/<source-key>", 
  Bucket: "<destination-bucket>",
  Key: "<destination-key>"
};

try {
    const result = await s3.copyObject(params).promise();
} catch (error) {
    console.log(error);
}