Lambda Function Error : EROFS: read-only file system, open './tmp/test.zip' Process exited before completing request

23,623

You need to change the file path to just /tmp instead of ./tmp. Lambda only allows you to write to the /tmp directory.

Share:
23,623
Sharan
Author by

Sharan

Updated on July 09, 2022

Comments

  • Sharan
    Sharan almost 2 years

    I have download a zip file from s3 bucket then extracting the zip file and finally upload one file to s3 bucket in Lambda function using Node JS.But am getting the error

    ==> Error: EROFS: read-only file system, open './tmp/test.zip' "Process exited before completing> request"

    exports.handler = function (callback) {
    
    downloadZipFile(params, downloadPath, function (err) {
        if (err) {
            callback(err);
        } else {
            processZipFile(downloadPath, function (err) {
                if (err) {
                    callback(err);
                } else {
                    callback(null);
                }
            });
    
          }
      });
    
    };
    
    function downloadZipFile(params, downloadPath, callback) {
    
    const file = fs.createWriteStream(downloadPath);
    
    s3.getObject(params)
        .on('httpData', function (chunk) {
    
            file.write(chunk);
        })
        .on('success', function () {
    
            callback(null);
        })
        .on('error', function (err) {
    
            callback(err);
        })
        .on('complete', function () {
    
            file.end();
        })
        .send();
    }
    
    function processZipFile(filePath) {
    
    const stats = fs.statSync(filePath)
    const fileSizeInBytes = stats.size
    
    if (fileSizeInBytes > 0) {
    
        var srcPath = filePath;
        var destPath = "./tmp";
        targz.decompress({
            src: srcPath,
            dest: destPath
    
        }, function (err) {
            if (err) {
                console.log(err);
            } else {
                console.log("Done!");
    
                UploadFile();
            }
    
        });
      }
    }
    
    function UploadFile() {
    
    var body = fs.createReadStream('./tmp/SampleFile.txt')
    
    var srcfileKey = "SampleFile.txt";
    // Upload the stream
    var s3obj = new AWS.S3({ params: { Bucket: bucketName, Key: srcfileKey } });
    s3obj.upload({ Body: body }, function (err, data) {
        if (err) {
            console.log("An error occurred", err);
        }
    
        console.log("Uploaded the file at", data.Location);
     })
    }