我尝试写入aws lambda实例的文件系统失败了。 The docs say标准lambda实例在/tmp/
处有512mb的可用空间。但是,在本地计算机上运行的以下代码在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!");
});
匿名回调函数中的代码永远不会在lambda实例上调用。这有什么成功的吗?非常感谢你的帮助。
这可能是相关的question。是否有可能在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");
}
});
}
});
};
答案 0 :(得分: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");
}
});
};
答案 1 :(得分:9)
所以答案在于context.fail()
或context.succeed()
函数。作为aws和lambda世界的新手,我对于调用这些方法中的任何一个都是无知的{。{3}}。
根据文件:
context.succeed()方法表示成功执行并返回 一个字符串。
通过消除这些并且在我运行了我想要的所有代码之后只调用它们,一切运行良好。