从 AWS Lambda 上的文件系统读取 PNG 文件时出错
An error occured to read the PNG file from file system on AWS Lambda
我正在使用 AWS Lambda 并将从 Lambda 函数读取一些文件。
可以读取文本文件,即使无法读取 png 文件。好像有点奇怪。
AWS lambda 是否无法读取 PNG 文件?
我做了以下过程:
为了上传到AWS Lambda,正在归档一个项目。
$ ls -1
index.js
test.png
test.txt
$ cat index.js
exports.handler = function(event, context) {
var fs = require('fs');
var path = __dirname + '/test.txt';
fs.readFile(path, function(err, buffer) {
console.log('err = ' + err);
console.log(buffer.length);
context.done();
});
}
$ zip -r lambda.zip .
adding: index.js (deflated 35%)
adding: test.png (deflated 1%)
adding: test.txt (stored 0%)
将存档文件上传到 AWS Lambda 并调用函数。
调用结果成功
START RequestId: 2997ce37-2628-11e5-9e15-456a1ab0c0d0
2015-07-09T10:49:24.660Z 2997ce37-2628-11e5-9e15-456a1ab0c0d0 err = null
2015-07-09T10:49:24.661Z 2997ce37-2628-11e5-9e15-456a1ab0c0d0 5
END RequestId: 2997ce37-2628-11e5-9e15-456a1ab0c0d0
REPORT RequestId: 2997ce37-2628-11e5-9e15-456a1ab0c0d0 Duration: 123.68 ms Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 9 MB
Cnahge 读取文件从 test.txt 到 test.png。
将存档文件上传到 AWS Lambda 并调用函数。
调用失败
START RequestId: d9d5b6ff-2627-11e5-92ff-85a0d38392ee
2015-07-09T10:47:10.689Z d9d5b6ff-2627-11e5-92ff-85a0d38392ee err = Error: EACCES, open '/var/task/resource/test.png'
END RequestId: d9d5b6ff-2627-11e5-92ff-85a0d38392ee
REPORT RequestId: d9d5b6ff-2627-11e5-92ff-85a0d38392ee Duration: 214.73 ms Billed Duration: 300 ms Memory Size: 128 MB Max Memory Used: 10 MB
Process exited before completing request
我认为文件权限有问题。
尝试 ls -l
AWS Lambda 使用v0.10.36
,确实可以在本地测试。
例如,创建一个 test.js
,如下所示:
var handler = require('.').handler;
var ctx = {
done: function () {
console.log('Done');
}
};
handler('', ctx);
对于这种情况,您可以简单地使用 test.js
,如下所示:
var fs = require('fs');
var path = __dirname + '/test.png';
fs.readFile(path, function(err, buffer) {
console.log('err = ' + err);
console.log(buffer.length);
context.done();
});
我正在使用 AWS Lambda 并将从 Lambda 函数读取一些文件。
可以读取文本文件,即使无法读取 png 文件。好像有点奇怪。 AWS lambda 是否无法读取 PNG 文件?
我做了以下过程:
为了上传到AWS Lambda,正在归档一个项目。
$ ls -1 index.js test.png test.txt $ cat index.js exports.handler = function(event, context) { var fs = require('fs'); var path = __dirname + '/test.txt'; fs.readFile(path, function(err, buffer) { console.log('err = ' + err); console.log(buffer.length); context.done(); }); } $ zip -r lambda.zip . adding: index.js (deflated 35%) adding: test.png (deflated 1%) adding: test.txt (stored 0%)
将存档文件上传到 AWS Lambda 并调用函数。
调用结果成功
START RequestId: 2997ce37-2628-11e5-9e15-456a1ab0c0d0 2015-07-09T10:49:24.660Z 2997ce37-2628-11e5-9e15-456a1ab0c0d0 err = null 2015-07-09T10:49:24.661Z 2997ce37-2628-11e5-9e15-456a1ab0c0d0 5 END RequestId: 2997ce37-2628-11e5-9e15-456a1ab0c0d0 REPORT RequestId: 2997ce37-2628-11e5-9e15-456a1ab0c0d0 Duration: 123.68 ms Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 9 MB
Cnahge 读取文件从 test.txt 到 test.png。
将存档文件上传到 AWS Lambda 并调用函数。
调用失败
START RequestId: d9d5b6ff-2627-11e5-92ff-85a0d38392ee 2015-07-09T10:47:10.689Z d9d5b6ff-2627-11e5-92ff-85a0d38392ee err = Error: EACCES, open '/var/task/resource/test.png' END RequestId: d9d5b6ff-2627-11e5-92ff-85a0d38392ee REPORT RequestId: d9d5b6ff-2627-11e5-92ff-85a0d38392ee Duration: 214.73 ms Billed Duration: 300 ms Memory Size: 128 MB Max Memory Used: 10 MB Process exited before completing request
我认为文件权限有问题。
尝试 ls -l
AWS Lambda 使用v0.10.36
,确实可以在本地测试。
例如,创建一个 test.js
,如下所示:
var handler = require('.').handler;
var ctx = {
done: function () {
console.log('Done');
}
};
handler('', ctx);
对于这种情况,您可以简单地使用 test.js
,如下所示:
var fs = require('fs');
var path = __dirname + '/test.png';
fs.readFile(path, function(err, buffer) {
console.log('err = ' + err);
console.log(buffer.length);
context.done();
});