2017-09-06 5 views
0

Wenn ein Python Zip-Paket zu AWS Lambda von S3 Hochladen erhalte ich die folgenden kryptischen Fehler:Zugriff verweigerte nach AWS Lambda Python Zip von S3 hochladen

module initialization error: [Errno 13] Permission denied: '/var/task/lambda_function.py' 

Der Fehler, der zu sein scheint, wenn Sie ein ZIP-Paket erstellen Mit restriktiven Berechtigungen wird AWS verwirrt. Im Wesentlichen entpackt AWS Ihr Paket mit den Berechtigungen, die Sie ihm gegeben haben, und versucht, es zu verwenden. Besonders verwirrend kann es sein, dass Sie möglicherweise einen Teil der Zip-Dateien aus dem AWS Lambda-Inline-Code-Editor sehen (Sie haben also eine gewisse Berechtigung), aber die Lambda-Funktion wird den obigen Fehler verursachen.

Was ist der beste Weg, damit umzugehen (entweder eine bessere Fehlermeldung oder das Problem zu lösen)?

Antwort

1

Der Ansatz, den ich verwendet habe, war vorsichtig zu sein, wie ich mein Zip-Paket in Python erstellt.

Statt etwas wie

ziph = zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED) 
ziph.writestr(file_name, my_data) 

tun ersetzen ich die letzte Zeile oben mit

zinfo = zipfile.ZipInfo(file_name) 
zinfo.external_attr = 0o777 << 16 # give full access to included file 
ziph.writestr(zinfo, my_data) 

Um sicherzustellen, explizit vollen Berechtigungen zu erteilen. Wenn Sie dies nicht tun, verwendet writestr zu restriktive Standardberechtigungen. (Anmerkung: Das obige ist für Python 3.6).