Serverless

API-Gateway mit Lambda-"Das Modul 'server' konnte nicht importiert werden:No module named 'server'"

Hello Everyone,

Ich habe versucht, eine serverlose API mit Typoskript gemäß https://github.com/fortejas/example-serverless-python-api in einer Cloud9-Umgebung einzurichten. Die Bereitstellung ist erfolgreich, aber wenn ich auf den REST-API-Endpunkt zugreife, bekomme ich folgender Fehler

curl -d POST https://8egyaaan6f.execute-api.ap-southeast-2.amazonaws.com/prod/update {"message": "Interner Serverfehler"}

[ERROR] Runtime.ImportModuleError: Unable to import module 'server': No module named 'server'
Traceback (most recent call last):

Bei weiteren Untersuchungen scheint der Fehler mit https://github.com/fortejas/example-serverless-python-api/blob/main/lambda-api/server.py zusammenzuhängen. Jede Hilfe wird geschätzt

Tue Jan 11 05:32:21 UTC 2022 : Endpoint response body before transformations: {"errorMessage": "Unable to import module 'server': No module named 'server'", "errorType": "Runtime.ImportModuleError", "requestId": "0be79d0e-e10b-4651-8838-b4e8dff65143", "stackTrace": []}
Tue Jan 11 05:32:21 UTC 2022 : Lambda execution failed with status 200 due to customer function error: Unable to import module 'server': No module named 'server'. Lambda request id: 0be79d0e-e10b-4651-8838-b4e8dff65143
Tue Jan 11 05:32:21 UTC 2022 : Method completed with status: 502

Hi,

Aus der Fehlermeldung geht hervor, dass die Lambda-Funktion die Handler-Methode nicht finden kann, die sich in der Datei server.py befindet. Lambda versucht, nach der Datei server.py zu suchen, kann sie aber nicht finden. Weitere Informationen zum Festlegen des Python-Lambda-Handlers finden Sie hier in dieser Dokumentation

Bitte überprüfen Sie die Lambda-Funktion,die Ordnerstruktur und stellen Sie sicher,dass der konfigurierte Handler den richtigen Pfad hat.

Nehmen wir an,ich habe die folgende Ordnerstruktur in meiner Lambda-Funktion mit dem Namen "PythonLambda":

PythonLambda (This is the top Level folder which will have the same name as the Lambda function)
  -> lambda-api (This is a sub-folder)
      -> server.py (the server.py file is under the folder lambda-api)

Wenn mein Lambda-Handler server.lambda_handler ist, erhalte ich einen identischen Fehler wie Ihr Fehler:

START RequestId: 1d69b994-d660-4d64-ac74-83f6a659ae5c Version: $LATEST
[ERROR] Runtime.ImportModuleError: Unable to import module 'server': No module named 'server'
Traceback (most recent call last):END RequestId: 1d69b994-d660-4d64-ac74-83f6a659ae5c
REPORT RequestId: 1d69b994-d660-4d64-ac74-83f6a659ae5c	Duration: 1.04 ms	Billed Duration: 2 ms	Memory Size: 128 MB	Max Memory Used: 37 MB	
  • Das liegt daran,dass Lambda versucht,im obersten Ordner nach server.py zu suchen,es aber nicht finden kann.

Um dieses Lambda erfolgreich aufrufen zu können, müssen wir den Handler in lambda-api.server.lambda_handler ändern , damit Lambda ihn unter dem Ordner finden kann.

START RequestId: 3c1b9e59-7ed0-41fe-8207-abc163067f56 Version: $LATEST
END RequestId: 3c1b9e59-7ed0-41fe-8207-abc163067f56
REPORT RequestId: 3c1b9e59-7ed0-41fe-8207-abc163067f56	Duration: 0.90 ms	Billed Duration: 1 ms	Memory Size: 128 MB	Max Memory Used: 37 MB