【发布时间】:2021-09-18 18:52:49
【问题描述】:
我有一个使用 lambda 下载和上传文件到 s3 的任务,场景是这样的
- 从 s3 bucket1(请求文件夹)下载文件到 lambda
- 从 lambda 将相同的文件上传到 s3 bucket2(请求文件夹)
downloadFiles 和 uploadFiles fn 都在 lambda 的根目录 (var/task/) 内的 utils/s3.js 内
这是我的utils/s3.jsdownloadFiles 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);
}
};
现在有两种情况,
-
如果我在根目录
tmp中创建一个文件夹,则会出现此错误“EROFS:只读文件系统,打开'/var/task/tmp/text.txt'”
-
如果我不这样做
“ENOENT:没有这样的文件或目录,打开'/var/task/tmp/text.txt'”
现在我已经阅读了关于 stackoverflow 的大部分答案,我知道我应该将文件保存到 /tmp/filename,,但是我为什么这样做却不起作用,我哪里错了?
【问题讨论】:
-
我认为您在这里的做法很糟糕。为什么要使用临时文件夹?您可以直接使用 lambda 复制文件,而无需将它们下载到临时文件夹(临时文件夹也有 500mb 限制) Python 中的示例(还有一些基于事件触发的自动化,但您可以看到逻辑):geeksforgeeks.org/…
-
如果我已经有了这个 lambda 函数的 sns 触发器,我必须根据 sns 上传文件怎么办?
标签: node.js amazon-web-services aws-lambda aws-sdk aws-sdk-nodejs