Подтвердить что ты не робот

AWS Lambda - загрузка файла и использование его в той же функции - nodejs

У меня есть файлы сертификатов через s3 (public), и я загружаю и использую эти файлы в своем коде. Если я пишу эквивалентный код в nodejs на моем локальном, он просто работает нормально, но в AWS лямбда он просто сбой.

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();

  });
});
}

Ошибка, которую я получаю, связана с доступом к файлам, я полагаю -

events.js:72 
 throw er; // Unhandled 'error' event 
 ^ 
Error: EACCES, open 'PushChatCert.pem'

Итак, в то время как на AWS Lambda есть некоторые особые проблемы, когда вы загружаете файл и используете его, связанный с его путем или чем-то еще, где хранятся файлы, когда они загружаются, на самом деле я даже не вижу журнал загружаемого файла.

4b9b3361

Ответ 1

Единственной доступной локальной файловой системой, которую вы можете записать в Lambda, является /tmp, поэтому убедитесь, что путь для локального файла, который вы пытаетесь записать, находится в каталоге /tmp, и вы должны быть настроены.