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

在AWS lambda上从nodejs调用python-权限被拒绝,python,linux,node.js,amazon-web-services,aws-lambda,Python,Linux,Node.js,Amazon Web Services,Aws Lambda,我可以使用下面的函数从AWS Lambda上的nodejs调用python。但是,因为我需要特定的python库,所以我在env目录中创建了一个virutalenv。我把所有东西都拉上拉链,推到拉姆达跟前。但是当我尝试从虚拟目录调用python时,我得到了一个权限拒绝错误 在调用python之前,我试图修改Lambda上的chmod权限,但得到了不允许的操作。我怎样才能让它运行 console.log('Loading event'); var exec = require('child_pr

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

在调用python之前,我试图修改Lambda上的chmod权限,但得到了不允许的操作。我怎样才能让它运行

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)"
  ]
}
试试这个:

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

Amazon有一个关于在Lambda中使用Python的教程

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

注意,此虚拟环境是在windows中创建的。我还尝试在没有任何帮助的情况下从Linux中访问env/bin/python district.py

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

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

总而言之:

  • 在Linux机器上,使用Linux可执行文件
  • 在创建存档文件之前,设置可执行文件的可执行位

  • 谢谢第一点对我来说应该是显而易见的。第二点我尝试过,但也许我做得不对
    chmod+x env/bin/python
    我得到这个错误:
    chmod:changing env/bin/python的权限:Operation not allowed
    如果我尝试
    sudo chmod+x env/bin/python
    我得到sudo:command not found Operation not allowed:你在使用什么文件系统?显然不是默认的Linux文件系统(ext2、ext3或ext4)。sudo:未找到命令:您使用的是什么发行版?并非所有发行版都安装和配置了sudo。您可能希望改用
    su
    。更正:即使您没有编辑文件的权限,chmod也可能因“不允许操作”而失败。那么ls-l env/bin/python说什么呢?输出:
    -rw-rw-r--1切片器497 5120 Aug 13 15:30 env/bin/python\n
    试图调用virtualenv python环境。这段代码确实可以调用安装在AWS linux实例上的python,但是试图找到一种合理的方法来安装python库依赖项