2017-10-03 6 views
0

Ich hatte ein Problem mit laufenden Lambda-Funktion mit hochgeladene .zip Datei von Python-Skript, die immer erzeugt "Unable to import module '...': No module named ..." (ich habe sichergestellt, dass meine Lambda-Handler meine Python-Dateinamen übereinstimmte), und durch Online-Forschung, die ich habe festgestellt, dass die Art, wie Dateien gezippt werden, in diesem Fall sehr streng ist.AWS Lambda Zip-Datei Befehl

Die Lösung folgenden Befehl Beispiele bereitgestellt

Falscher Befehl:

$ ls 
    lambda_sample 
$ zip -r lambda_sample lambda_sample 

Correct Befehl:

$ cd lambda_sample 
$ zip -r ../lambda_sample . 

Und in der Tat, für mich der zweite Befehl gearbeitet.

Also frage ich mich, warum wird der erste Befehl nicht funktionieren? Außerdem benutze ich macOS, und durch Rechtsklick auf Ordner und Compress [folder_name] würde eine [folder_name].zip Datei, die nicht von Lambda lesbar ist, erzeugen daher den gleichen Fehler, den ich am Anfang erwähnte. Könnte jemand einen Einblick geben?

Antwort

3

AWS Lambda erwartet Ihren Handler in der Basis/Wurzel der Zip-Datei, und die zip Befehle, die Sie anzeigen, erzeugen unterschiedliche Dateilayouts.

Ich werde mit einigen Beispielen aus meinem eigenen System demonstrieren.

Dies ist ein Beispiel für den ersten Befehl:

> ls 
package 
> zip -r package package 
adding: package/ (stored 0%) 
adding: package/lambda.py (deflated 38%) 
adding: package/process/ (stored 0%) 
adding: package/process/__init__.py (stored 0%) 
adding: package/process/aws.py (deflated 56%) 
# ... etc. 

Wenn ich unzip package.zip, sieht die Ordnerstruktur der resultierenden entpackte Datei wie folgt aus:

package/lambda.py 
package/process/ 
package/process/__init__.py 
# and so on 

Nun wird ein Beispiel der zweiten Befehl, wo ich cd package zuerst:

> zip -r ../package . 
adding: lambda.py (deflated 38%) 
adding: process/ (stored 0%) 
# ... etc. 

So die resultierenden entpackte Datei, wenn ich unzip package.zip wie folgt aussieht:

lambda.py 
process/ 
process/__init__.py 
# etc. 

So im zweiten Fall, müssen Sie nicht auf das übergeordnete Verzeichnis, nachdem Sie die ZIP-Erweiterung und AWS Lambda korrekt funktionieren.