AWS Lambda - downloading a file, and using it in the same function - nodejs
Solution 1
The only available local file system you can write to in Lambda is /tmp so make sure the path for the local file you are trying to write to is in the /tmp directory and you should be all set.
Solution 2
Just note as of last year (2020) Lambdas support EFS as a mount as well so you can write to EFS mount point. Excessive for your case..but it might help for someone doing large file processing https://aws.amazon.com/blogs/compute/using-amazon-efs-for-aws-lambda-in-your-serverless-applications/
Related videos on Youtube
Brij Raj Singh - MSFT
Sr. Software Engineer, CSE (Microsoft) Hi, I am Brij, and I am a Senior Software Engineer in Commercial Software Engineering at Microsoft.
Updated on April 08, 2021Comments
-
Brij Raj Singh - MSFT over 2 years
I have some certificate files over s3 (public) and I am to download and use these files in my code, If I write an equivalent code in nodejs at my local, it just runs fine, but in AWS lambda it just crashes.
var apn = require('apn'); var https = require('https'); var fs = require('fs'); exports.handler = function(event, context) { console.log("Running aws apn push message function"); console.log("=================================="); console.log("event", event); var certPath = event.certPath; var keyPath = event.keyPath; var certFileName = event.certFileName; var keyFileName = event.keyFileName; var passphrase = event.passphrase; var apnId = event.apnId; var content = event.content; var certfile = fs.createWriteStream(certFileName); var certrequest = https.get(certPath, function(certresponse) { certresponse.pipe(certfile); console.log("downloaded the certificate"); var keyfile = fs.createWriteStream(keyFileName); var keyrequest = https.get(keyPath, function(keyresponse) { keyresponse.pipe(keyfile); console.log("downloaded the key file"); var options = { "cert":certFileName, "key":keyFileName, "passphrase":passphrase, "batchFeedback": true, "interval": 10 }; var apnConnection = new apn.Connection(options); var myDevice = new apn.Device(apnId); var note = new apn.Notification(); note.expiry = Math.floor(Date.now() / 1000) + 3600; // Expires 1 hour from now. note.payload = {'COMMAND': content}; apnConnection.pushNotification(note, myDevice); console.log('message sent to ' + apnId); context.done(); }); }); }
Error I get is related to accessing files i suppose -
events.js:72 throw er; // Unhandled 'error' event ^ Error: EACCES, open 'PushChatCert.pem'
So while on AWS Lambda is there some specific concerns when one is downloading a file and using it, related to its path or something, where do the files stay when they get downloaded, in fact I don't even see the log of file getting downloaded.