你如何写入aws lambda实例的文件系统?

Rym*_*nel 34 javascript amazon-s3 amazon-web-services node.js aws-lambda

我没有成功写入aws lambda实例的文件系统. 文档说标准的lambda实例有512mb的可用空间/tmp/.但是,在本地计算机上运行的以下代码在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!");
  });
Run Code Online (Sandbox Code Playgroud)

匿名回调函数中的代码永远不会在lambda实例上调用.这有什么成功的吗?非常感谢你的帮助.

这可能是一个相关的问题.是否有可能在s3代码和我正在尝试用fs回调函数之间发生某种冲突?下面的代码是当前正在运行的代码.

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");
                }
            });
        }
    });
};
Run Code Online (Sandbox Code Playgroud)

Jam*_*mes 16

将代码修改为Lambda模板对我有用.我认为你需要分配给一个函数exports.handler并调用相应context.succeed()context.fail()方法.否则,您只会得到一般错误.

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");
        }
    });
};
Run Code Online (Sandbox Code Playgroud)


Rym*_*nel 11

所以答案在于context.fail()context.succeed()功能.作为aws和lambda世界的全新,我对于调用任何这些方法停止执行lambda实例这一事实一无所知.

根据文件:

context.succeed()方法表示成功执行并返回一个字符串.

通过消除这些并且在我运行了我想要的所有代码之后只调用它们,一切都运行良好.