gpt4 book ai didi

node.js - 获取错误 AWS Lambda : EROFS: read-only file system, 打开 '/var/task/assets/docs.zip'

转载 作者:行者123 更新时间:2023-12-03 12:13:18 24 4
gpt4 key购买 nike

任何人都可以帮助我解释为什么我遇到这个问题我在本地运行这段代码它运行得很好但是在aws lambda上我得到了这个错误即使我增加了lambda超时功能和内存的时间。

在这段代码中,我为 get call 做了一个基本任务,我只是将 xlsx 转换为 json,在后期我只是将测试目录转换为 zip 文件。任何人都可以帮助我摆脱这种情况,此错误在此先感谢。

这是我的代码

索引.js

"use strict"
const fs = require("fs");
const path = require("path");
const ctrlFuns = require("./functionality");
const output = fs.createWriteStream(path.join(__dirname,
"./assets/docs.zip"));
const archiver = require("archiver");
const zipArchive = archiver("zip", {
gzip: true,
zlib: {
level: 9
} // Sets the compression level.
});

exports.handleHttpRequest = function (event, context, callback) {

if (event.http_method == "GET") {
ctrlFuns.xlsxToJson().then((jsonObjs) => {
callback(null, {
users: jsonObjs,
});
}).catch((err) => {
callback(err);
});
}
else if (event.http_method == "POST") {
fs.readFile(path.join(__dirname + "/test/test.xlsx"), (err, file) => {
if (err) {
callback(err);
} else {

//pipe archive data to the file
zipArchive.pipe(output);

zipArchive.append(file, {
name: "test.xlsx",
prefix: "test-data" //used for folder name in zip file
});

// to catch this error explicitly
zipArchive.on("error", (err) => {
callback(err);
});


//to perform end tasks while zip converted
zipArchive.on("end", () => {
fs.readFile(path.join(__dirname + "/assets/docs.zip"), (err,
success) => {
if (err) {
callback(err);
} else {
callback(null, success.toString("base64"));
}
});
});
//filnalizing the zip file for user use
zipArchive.finalize();
}
});
}
else {
callback(null, "run default case");
}
} //handler-closes

这是我的function.js
/**
* OBJECTIVE: TO CREATE THE FUNCTINALITY
*/
"use strict"

const XLSX = require("xlsx");
const fs = require("fs");
const path = require("path");


var ctrlFuns = {};

ctrlFuns.xlsxToJson = function () {
return new Promise((resolve, reject) => {
fs.readFile(path.join(__dirname + "/test/test.xlsx"), (err, file) => {
if (err) {
reject(err);
} else {
let workbook = XLSX.read(file.buffer, {
type: "buffer"
});

//if workbook is null
if (!workbook) {
reject("Workbook not found.");
}

/* Getting first workbook sheetName */
let first_sheet_name = workbook.SheetNames[0];

/* Get worksheet */
let worksheet = workbook.Sheets[first_sheet_name];

/**Convert Into JSON */
resolve(XLSX.utils.sheet_to_json(worksheet, {
raw: true
}));
}
});
})

} //fun-closes

module.exports = ctrlFuns;

当我在 cloud watch 上看到日志时,我得到了:

开始请求 ID:720cf48f-01c4-11e9-b715-9d54f664a1e8 版本:$LATEST
2018-12-17T06:24:45.756Z 720cf48f-01c4-11e9-b715-9d54f664a1e8 错误:EROFS:只读文件系统,打开'/var/task/assets/docs.zip'
结束请求 ID:720cf48f-01c4-11e9-b715-9d54f664a1e8

带有以下错误消息:

{
"errorMessage": "RequestId: 98b9e509-01c7-11e9-94dc-03cfdf0dae93 进程在完成请求前退出"
}

最佳答案

该错误似乎不言自明:

Error: EROFS: read-only file system, open '/var/task/assets/docs.zip' 
/var/task是您的 Lambda 函数代码所在的位置,在实际的 Lambda 环境中,该文件系统是只读的。如果需要写入文件,则需要写入 /tmp .

Q: What if I need scratch space on disk for my AWS Lambda function?

Each Lambda function receives 500MB of non-persistent disk space in its own /tmp directory.

https://aws.amazon.com/lambda/faqs/



请注意,您还需要自己清理并删除您创建的任何临时文件,因为一旦函数完成执行,它的容器可用于稍后调用同一函数的重用......这意味着相同的临时空间可能会持续存在很短的时间并再次被看到(但只能通过相同的功能)。

关于node.js - 获取错误 AWS Lambda : EROFS: read-only file system, 打开 '/var/task/assets/docs.zip',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53810516/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com