javascript - tutorial - ¿Cómo se escribe en el sistema de archivos de una instancia de aws lambda?




lambda node js tutorial (2)

Entonces, la respuesta se encuentra en las funciones context.fail() o context.succeed() . Siendo completamente nuevo en el mundo de aws y lambda, desconocía el hecho de que llamar a cualquiera de estos métodos detiene la ejecución de la instancia lambda .

De acuerdo con los documentos:

El método context.succeed () señala una ejecución exitosa y devuelve una cadena.

Al eliminar estos y solo llamarlos después de haber ejecutado todo el código que quería, todo funcionó bien.

Estoy tratando infructuosamente de escribir en el sistema de archivos de una instancia de aws lambda. Los documentos dicen que una instancia estándar de lambda tiene 512 mb de espacio disponible en /tmp/ . Sin embargo, el siguiente código que se ejecuta en mi máquina local no funciona en absoluto en la instancia de lambda:

  var fs = require('fs');
  fs.writeFile("/tmp/test.txt", "testing", function(err) {
      if(err) {
          return console.log(err);
      }
      console.log("The file was saved!");
  });

El código en la función de devolución de llamada anónima nunca se llama en la instancia lambda. ¿Alguien tuvo éxito al hacer esto? Muchas gracias por su ayuda.

Es posible que esta sea una question relacionada. ¿Es posible que haya algún tipo de conflicto entre el código s3 y lo que intento hacer con la función de devolución de llamada fs? El código a continuación es lo que se está ejecutando actualmente.

console.log('Loading function');

var aws = require('aws-sdk');
var s3 = new aws.S3({ apiVersion: '2006-03-01' });
var fs = require('fs');

exports.handler = function(event, context) {
    //console.log('Received event:', JSON.stringify(event, null, 2));

    // Get the object from the event and show its content type
    var bucket = event.Records[0].s3.bucket.name;
    var key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
    var params = {
        Bucket: bucket,
        Key: key
    };
    s3.getObject(params, function(err, data) {
        if (err) {
            console.log(err);
            var message = "Error getting object " + key + " from bucket " + bucket +
            ". Make sure they exist and your bucket is in the same region as this function.";
            console.log(message);
            context.fail(message);
        } else {

            //console.log("DATA: " + data.Body.toString());
            fs.writeFile("/tmp/test.csv", "testing", function (err) {

                if(err) {
                    context.failed("writeToTmp Failed " + err);
                } else {
                    context.succeed("writeFile succeeded");
                }
            });
        }
    });
};

Modificar su código en la plantilla Lambda funcionó para mí. Creo que debe asignar una función a exports.handler y llamar al método context.succeed() o context.fail() apropiado. De lo contrario, solo obtendrás errores genéricos.

var fs = require("fs");

exports.handler = function(event, context) {
    fs.writeFile("/tmp/test.txt", "testing", function (err) {
        if (err) {
            context.fail("writeFile failed: " + err);
        } else {
            context.succeed("writeFile succeeded");
        }
    });
};




aws-lambda