您如何写入 aws lambda 实例的文件系统?
How do you write to the file system of an aws lambda instance?
我尝试写入 aws lambda 实例的文件系统失败。 The docs say 标准 lambda 实例在 /tmp/
处有 512mb 的 space 可用。但是,我本地计算机上的以下代码 运行s 在 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 实例永远不会调用匿名回调函数中的代码。任何人都成功了吗?非常感谢您的帮助。
这可能是相关的。 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");
}
});
}
});
};
将您的代码修改为 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");
}
});
};
所以答案在于 context.fail()
或 context.succeed()
函数。作为 aws 和 lambda 世界的新手,我不知道调用这些方法中的任何一个 stops execution of the lambda instance.
根据文档:
The context.succeed() method signals successful execution and returns
a string.
通过消除这些并仅在我拥有 运行 我想要的所有代码后才调用它们,一切都运行良好。
我 运行 对此感兴趣,似乎 AWS Lambda 可能正在使用 fs
的旧(或修改)版本。我通过记录 fs.writeFile
的响应来解决这个问题,并注意到这不是一个承诺。
为了解决这个问题,我将调用封装在一个 promise 中:
var promise = new Promise(function(resolve, reject) {
fs.writeFile('/tmp/test.txt', 'testing', function (err) {
if (err) {
reject(err);
} else {
resolve();
}
});
});
希望这对其他人有帮助:hug-emoji:
我尝试写入 aws lambda 实例的文件系统失败。 The docs say 标准 lambda 实例在 /tmp/
处有 512mb 的 space 可用。但是,我本地计算机上的以下代码 运行s 在 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 实例永远不会调用匿名回调函数中的代码。任何人都成功了吗?非常感谢您的帮助。
这可能是相关的
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");
}
});
}
});
};
将您的代码修改为 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");
}
});
};
所以答案在于 context.fail()
或 context.succeed()
函数。作为 aws 和 lambda 世界的新手,我不知道调用这些方法中的任何一个 stops execution of the lambda instance.
根据文档:
The context.succeed() method signals successful execution and returns a string.
通过消除这些并仅在我拥有 运行 我想要的所有代码后才调用它们,一切都运行良好。
我 运行 对此感兴趣,似乎 AWS Lambda 可能正在使用 fs
的旧(或修改)版本。我通过记录 fs.writeFile
的响应来解决这个问题,并注意到这不是一个承诺。
为了解决这个问题,我将调用封装在一个 promise 中:
var promise = new Promise(function(resolve, reject) {
fs.writeFile('/tmp/test.txt', 'testing', function (err) {
if (err) {
reject(err);
} else {
resolve();
}
});
});
希望这对其他人有帮助:hug-emoji: