Kann Requests-Module in AWS Lambda nicht verwenden

10

Ich muss einen Rest-Aufruf innerhalb eines Python-Skripts durchführen, das einmal am Tag ausgeführt wird. Ich kann das Paket "requests" nicht mit dem AWS Lambdas in mein Python-Paket packen. Ich erhalte den Fehler: "Das Modul 'lambda_function' konnte nicht importiert werden: Kein Modul namens lambda_function"

Ich habe es auf das vordefinierte Skript hallo_world heruntergebrochen. Ich kann es in einen Reißverschluss packen und es hochladen. Funktioniert alles. Sobald ich "Import Requests" in die Datei lege, bekomme ich diesen Fehler.

Hier ist was ich schon gemacht habe:

  1. Die Berechtigungen der Zip-Datei und des Projektordners (einschließlich der Unterordner) sind auf "chmod 777" eingestellt. Also Berechtigungen sollten kein Problem sein.
  2. Das Skript selbst befindet sich im Stammordner. Wenn Sie die Zip-Datei öffnen, sehen Sie sie direkt.
  3. Ich habe das Requests-Paket mit 'sudo pip install requests -t PATH_TO_ROOT_FOLDER'
  4. in den Root-Ordner des Projekts installiert

Die Benennung von allem sieht so aus:

  • zip-Datei: lambda_function.zip
  • py-Datei: lambda_function.py
  • Handler-Methode: lambda_handler (Ereignis, Kontext)
  • Handler-Definition in der "webconfig: lambda_function.lambda_handler

Die Datei, die ich am Ende ausführen möchte, sieht folgendermaßen aus:

%Vor%

Ich bin froh für jede Art von Hilfe. Ich habe bereits mehrere Stunden zu diesem Thema verwendet.

    
codepleb 22.11.2016, 11:59
quelle

3 Antworten

9

Ich habe das Problem endlich gelöst: Die Struktur in meiner Zip-Datei war kaputt. Es ist wichtig, dass das Python-Skript und die gepackten Abhängigkeiten (als Ordner) im Stamm der ZIP-Datei liegen. Das hat mein Problem gelöst.

Es ist ein bisschen deprimierend, wenn Sie nach stundenlangem Versuch und Versagen so einfache Fehler finden.

    
codepleb 22.11.2016, 12:30
quelle
30

Um das Requests-Modul zu verwenden, können Sie einfach requests von botocore.vendored importieren. Zum Beispiel:

%Vor%

Sie können diesen Kern sehen, um mehr Module zu kennen, die direkt importiert werden können AWS Lambda

    
Sining Liu 29.01.2018 06:46
quelle
4

Ich glaube, Sie haben lambda_function.py auf der Lambda-Konsole. Sie müssen zunächst das Bereitstellungspaket für die Lambda-Funktion erstellen und anschließend das Paket mithilfe der Konsole hochladen.

  • Sie erstellen ein Verzeichnis, zum Beispiel project-dir auf Ihrem System (lokal)
  • Erstelle lambda_function.py in project-dir , kopiere den Inhalt von lambda_function.py von der Lambda-Konsole und füge ihn in project-dir/lambda_function.py ein
  • pip install requests -t /path/to/project-dir
  • Zippen Sie den Inhalt des Verzeichnisses project-dir , das Ihr Bereitstellungspaket ist (Zip den Verzeichnisinhalt, nicht das Verzeichnis)

Gehe zur Lambda-Konsole, wähle Upload-Zip-Datei im Code-Entry-Typ und lade dein Deployment-Paket hoch. Importanforderungen sollten ohne Fehler funktionieren.

    
Pramod Munemanik 20.12.2017 09:59
quelle