从AWS lambda上的nodejs调用python - 权限被拒绝

时间:2015-08-14 16:50:45

标签: python linux node.js amazon-web-services aws-lambda

我可以使用以下函数从AWS Lambda上的nodejs调用我的python。但是,因为我需要特定的python库,所以我在env目录中创建了一个virutalenv。我把所有东西拉上拉链然后推到Lambda。但是当我尝试从虚拟目录调用python时,我得到一个Permission Denied错误。

我尝试在调用python之前修改Lambda上的chmod权限,但是获得了Operation Not Permitted。我怎么能让它运行?

console.log('Loading event');

var exec = require('child_process').exec;

exports.handler = function(event, context) {

    exec('env/bin/python district.py \'' + JSON.stringify(event) +   '\'',  function(error, stdout) {
        var obj = stdout.toString();
        context.done(error, obj);
    });
};

这是错误:

{
  "errorMessage": "Command failed: /bin/sh: env/bin/python:    Permission denied\n",
  "errorType": "Error",
  "stackTrace": [
    "",
    "ChildProcess.exithandler (child_process.js:658:15)",
    "ChildProcess.emit (events.js:98:17)",
    "maybeClose (child_process.js:766:16)",
    "Process.ChildProcess._handle.onexit (child_process.js:833:5)"
  ]
}

2 个答案:

答案 0 :(得分:0)

试试这个:

exec('python district.py "'+ JSON.stringify(event) +'"', function(error, stdout) {
    console.log('Python returned: ' + stdout + '.');
    context.done(error, stdout);
});

亚马逊有一个关于在Lambda here

中使用Python的教程

答案 1 :(得分:0)

该错误很可能表示python.exe没有设置可执行位。但请注意,即使您设置了x位,它也不起作用:.exe文件是Windows可执行文件,它们不起作用。

  

注意,这个虚拟环境是在windows中创建的。我也尝试从env/bin/python district.py中的Linux中没有任何帮助。

env/bin/python是正确的命令。如果仍然出现Permission Denied错误,则表示文件python缺少可执行位。

在AWS Lamba运行时环境中,您不能更改文件的权限,也不允许更改用户,因此您必须设置可执行位(或您需要的任何其他权限位)创建.zip存档时

总结一下:

  1. 在Linux计算机上,使用Linux可执行文件。
  2. 在创建存档之前设置可执行文件的可执行位。