Nicht verwenden Requests-Modul auf AWS Lambda
Muss ich tun, um ein rest-Aufruf in ein python-Skript, das läuft einmal pro Tag.
Ich kann nicht packen "Anforderungen" Paket in mein python-Paket mit AWS Lambda-Ausdrücke. Ich bekomme die Fehlermeldung: "Unable to import Modul 'lambda_function': No module named lambda_function"
Ich brach es nach unten, um die hello_world vordefinierte Skript. Kann ich pack es in eine zip-Datei und laden Sie Sie hoch. Alles funktioniert. Sobald ich "Importe" in die Datei bekomme ich diesen Fehler.
Ist hier, was ich bereits gemacht habe:
- Die Berechtigungen der zip-und der Projekt-Ordner (einschließlich der Unterordner) auf `chmod 777`. Also Berechtigungen sollte nicht das problem sein.
- Das Skript selbst ist in der root-Ordner. Beim öffnen der zip-Datei, die Sie direkt sehen.
- Habe ich installiert, die Anfragen-Paket in das root-Ordner des Projekts unter Verwendung von `sudo pip install requests-t PATH_TO_ROOT_FOLDER`
Die Benennung der alles sieht wie folgt aus:
- zip-Datei: lambda_function.zip
- py-Datei: lambda_function.py
- handler-Methode: lambda_handler(Ereignis, Kontext)
- - handler-definition, die in der "webconfig: lambda_function.lambda_handler
Die Datei, die ich ausführen möchte sieht am Ende aus wie diese:
import requests
import json
def lambda_handler(event, context):
url = 'xxx.elasticbeanstalk.com/users/login'
headers = {"content-type": "application/json", "Authorization": "Basic Zxxxxxxxxx3NjxxZxxxxzcw==" }
response = requests.put(url, headers=headers, verify=False)
return 'hello lambda_handler'
Ich bin froh, für JEDE Art von Hilfe. Ich schon mehrere Stunden an diesem Problem.
-t
option in der pip install
Befehl ist falsch - es muss pip install requests -t PATH_TO_ROOT_FOLDER
. Haben Sie sich nur vertippt haben, oder dieses ist, wie Sie wirklich lief?Recht. Gerade überprüft die Geschichte und ich Tat es wie Sie es hier erwähnen. 🙂 So, dass nicht die Ursache für das problem.
Welche Python version nutzt du lokal?
2.7.12 (15chars)
Haben Sie gesehen, die Anleitung auf docs.aws.amazon.com/lambda/latest/dg/... ?
InformationsquelleAutor codepleb | 2016-11-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden requests-Modul, können Sie einfach importieren
requests
ausbotocore.vendored
. Zum Beispiel:können Sie sehen, diese gist mehr wissen Modulen importiert werden können, die direkt in der AWS lambda -
urllib2
(nicht so benutzerfreundlich wierequests
)Ist es eine Sorge, diese könnten sich in späteren Versionen? "Während diese vendored Abhängigkeiten sind immer noch in der botocore Paket sollten Sie nicht verwendet werden, da Sie entfernt werden, in der Zukunft" botocore.amazonaws.com/v1/documentation/api/latest/...
InformationsquelleAutor Sining Liu
Habe ich endlich das problem gelöst: Die Struktur in meiner zip-Datei defekt war. Es ist wichtig, dass das python-Skript und die gepackte Abhängigkeiten (als Ordner) in den root der zip-Datei. Das ist mein problem gelöst.
Es ist ein bisschen deprimierend, wenn man solche einfachen Fehler nach Stunden versuchen und scheitern.
Möglicherweise müssen Sie den import der json-Bibliothek. Nicht sicher zwar, aber AWS verwendet python 2.7 und nicht 3.x. Mein Skript nicht json zurückgeben.
ja python 2.7 hier. Gehen, um zu versuchen, mit expliziten Verweis auf die json-Bibliothek. Derzeit re-Verpackung.
OK, keine Freude, hier, in Ihrem code, den Sie einfach return 'Hallo lambda_helper', ich will wieder die gesamte JSON-Antwort von der API Bekommen, obwohl.... keine Sorge, wenn Sie nicht wissen, ich könnte tun, eine neue Frage
Ich Rückgabestatus codes. Aber ja, ich bin nicht viel in python. Es war kaum genug zu schreiben, dass ein Skript.
InformationsquelleAutor codepleb
Ich glaube, Sie haben
lambda_function.py
auf die Lambda-Konsole. Sie müssen zuerst die Lambda-Funktion-Bereitstellung-Paket, und verwenden Sie dann die Verwaltungskonsole, um das Paket hochgeladen.project-dir
auf Ihrem system (lokal)lambda_function.py
improject-dir
, kopieren Sie den Inhaltlambda_function.py
von der lambda-Konsole und fügen Sie ihn inproject-dir/lambda_function.py
pip install requests -t /path/to/project-dir
project-dir
Verzeichnis -, die Ihre deployment-Paket (Zip-Verzeichnis den Inhalt, nicht das Verzeichnis)Gehen, um die Lambda-Konsole, wählen Sie upload-zip-Datei in die Eingabe von code-Typ und laden Sie Ihre deployment-Paket. Import requests funktionieren sollte, ohne Fehler.
InformationsquelleAutor Pramod Munemanik