Получение ошибки AWS Lambda: EROFS: файловая система только для чтения, откройте '/var/task/assets/docs.zip'

Может ли кто-нибудь помочь мне в том, почему у меня возникла эта проблема, я запускаю этот код локально, он отлично работает, но в aws lambda я получил эту ошибку, даже если я увеличил время по сравнению с функцией тайм-аута лямбда, а также памятью.

В этом коде я выполняю базовую задачу для вызова, я просто конвертирую xlsx в json, а в посте я просто конвертирую тестовый каталог в zip-файл. Я пробовал его в последние несколько часов для загрузки на aws lambda, теперь я застрял и постоянно вижу эта ошибка может помочь мне в этой ситуации заранее.

вот мой код

index.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

вот моя функциональность .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;

когда я увидел логи на облачных часах, я получил:

START RequestId: 720cf48f-01c4-11e9-b715-9d54f664a1e8 Версия: $ LATEST 2018-12-17T06: 24: 45.756Z 720cf48f-01c4-11e9-b715-9d54f664a1e8 Ошибка: EROFS: файловая система только для чтения, откройте '/var/task/assets/docs.zip' END RequestId: 720cf48f-01c4-11e9-b715-9d54f664a1e8

с сообщением об ошибке ниже:

{ "errorMessage": "RequestId: 98b9e509-01c7-11e9-94dc-03cfdf0dae93 Процесс завершен до завершения запроса" }

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
0
20 278
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ошибка кажется очевидной:

Error: EROFS: read-only file system, open '/var/task/assets/docs.zip' 

/var/task - это место, где расположена ваша лямбда-функция код, и в реальной среде лямбда эта файловая система доступна только для чтения. Если вам нужно записать в файл, вам нужно записать на /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/

Обратите внимание, что вам также необходимо очистить себя и удалить все созданные вами временные файлы, потому что после завершения выполнения функции ее контейнер доступен для повторного использования путем последующего вызова той же функции ... что означает, что это же временное пространство может сохраняться на короткое время и вас снова увидят (но только с помощью этой же функции).

Я потратил много часов, пытаясь исправить свой код, затем понял, что это проблема лямбда ...

Urko 17.11.2020 17:58

Также вы можете смонтировать эластичную файловую систему (уточняйте цены перед внедрением): https://aws.amazon.com/blogs/compute/using-amazon-efs-for-aws-lambda-in-your-serverless-applications/

Другие вопросы по теме