【发布时间】:2016-05-02 14:31:05
【问题描述】:
我没有成功尝试写入 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");
}
});
}
});
};
【问题讨论】:
-
我对 aws-lambda 的理解是代码运行是为了响应一些
event-event那段代码是否“响应”甚至被触发? -
@JaromandaX 是的,这是正确的。事件被成功触发。这是一组更大的代码的一部分,它试图编写从 S3 获取的 CSV 文件,然后将其转换为 Json 并再次将其上传到另一个 s3 存储桶,以便可以通过另一个 lambda 实例将其摄取到 dynamoDB 中。一切正常,但这件作品......
-
您正在使用
console.log- console.log 输出以某种方式可供您使用(我不使用 aws-lambda,这就是我问的原因) - 如果是这样,控制台是否可用。在执行 fs.writeFile 之前记录日志? -
只是出于好奇,为什么要在 lambda 上写入文件系统?感觉有点不像 lambda-ish...愿意分享用例吗?
-
我认为这个问题很相关;在某些情况下,需要写入文件系统(而不是在内存中)。我认为解决发布的具体问题很有用。
标签: javascript node.js amazon-web-services amazon-s3 aws-lambda