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

call python from nodejs on AWS lambda - permission denied

我可以使用以下函数从 AWS Lambda 上的 nodejs 调用我的 python。但是,因为我需要特定的 python 库,所以我在 env 目录中创建了一个 virutalenv。我把所有东西都压缩起来然后推到 Lambda。但是,当我尝试从虚拟目录调用 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 here

中使用 Python 的教程

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

Note, this virtual env was created in windows. I also attempted from Linux in the i.e. env/bin/python district.py with no help.

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

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

总结一下:

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