在AWS Lambda上从文件系统读取PNG文件时发生错误

时间:2015-07-09 11:21:31

标签: amazon-web-services aws-lambda

我正在使用AWS Lambda并将从Lambda函数中读取一些文件。

即使无法读取png文件,也可以读取文本文件。这似乎有点奇怪。 AWS lambda是否无法读取PNG文件?

我做了以下过程:

  1. 要上传到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%)
    
  2. 将存档文件上传到AWS Lambda并调用该函数。

  3. 调用结果成功。

    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   
    
  4. Cnahge从test.txt读取文件到test.png。

  5. 将存档文件上传到AWS Lambda并调用该函数。

  6. 调用结果失败。

    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
    

1 个答案:

答案 0 :(得分:1)

我认为文件权限有问题。 试试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();
  });