在AWS lambda上从nodejs调用python-权限被拒绝
我可以使用下面的函数从AWS Lambda上的nodejs调用python。但是,因为我需要特定的python库,所以我在env目录中创建了一个virutalenv。我把所有东西都拉上拉链,推到拉姆达跟前。但是当我尝试从虚拟目录调用python时,我得到了一个权限拒绝错误 在调用python之前,我试图修改Lambda上的chmod权限,但得到了不允许的操作。我怎样才能让它运行在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
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存档时,必须设置可执行位(或您需要的任何其他权限位)
总而言之:
谢谢第一点对我来说应该是显而易见的。第二点我尝试过,但也许我做得不对
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库依赖项