2015-08-14 138 views
3

我可以使用以下函數從AWS Lambda上的nodejs調用我的python。但是,因爲我需要特定的python庫,我在env目錄中創建了一個virutalenv。我壓縮了所有東西,並推送到Lambda。但是,當我嘗試從虛擬目錄調用python時,我得到了一個Permission Denied錯誤。從AWS lambda上的nodejs調用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)" 
    ] 
} 

回答

0

錯誤最可能的信號是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蘭巴運行環境,你不能改變文件的權限,也無法改變用戶,因此創建的.zip時,必須設置可執行位(或任何其他許可位需要)檔案

綜上所述:

  1. 在Linux計算機上,使用Linux的可執行文件。
  2. 在創建歸檔之前設置可執行文件的可執行位。
+0

謝謝。點#1應該對我來說很明顯。第二點我嘗試過但也許我做錯了? 'chmod + x env/bin/python'我得到這個錯誤:'chmod:改變env/bin/python的權限:不允許操作' – xcalx9

+0

如果我嘗試'sudo chmod + x env/bin/python'我得到* * sudo:命令未找到** – xcalx9

+0

**不允許的操作:**您使用的是什麼文件系統?顯然不是默認的Linux文件系統(ext2,ext3或ext4)。 ** sudo:命令未找到:**您使用的是什麼分配?並非所有的發行版都安裝並配置了sudo。你可能想用'su'代替。 –

0

嘗試了這一點:

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

亞馬遜有一個教程在LAMBDA使用Python here

+0

試圖調用virtualenv python envrionment。此代碼確實可以調用安裝在AWS Linux實例上的python,但試圖找到合理的方法來安裝python庫依賴項 – xcalx9