Serverless

Gateway API con Lambda-"Impossibile importare il modulo 'server':Nessun modulo di nome 'server'".

Hello Everyone,

Ho provato a configurare un'api serverless utilizzando dattiloscritto come da https://github.com/fortejas/example-serverless-python-api su un ambiente cloud9 La distribuzione ha esito positivo, tuttavia quando accedo all'endpoint API REST, ottengo il seguente errore

curl -d POST https://8egyaaan6f.execute-api.ap-southeast-2.amazonaws.com/prod/update {"message": "Errore interno del server"}

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

Su ulteriori indagini, l'errore sembra essere correlato a https://github.com/fortejas/example-serverless-python-api/blob/main/lambda-api/server.py Qualsiasi aiuto è apprezzato

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,

Dal messaggio di errore, sembra che la funzione Lambda non riesca a trovare il metodo Handler che si trova nel file server.py. Lambda prova a cercare il file server.py ma non riesce a trovarlo. Puoi leggere ulteriori informazioni sull'impostazione del gestore Lambda Python qui in questa documentazione

Controllare la funzione Lambda,verificare la struttura della cartella e confermare che l'Handler configurato abbia il percorso corretto.

Ad esempio,supponiamo di avere la seguente struttura di cartelle nella mia funzione Lambda denominata "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)

Se il mio gestore Lambda è server.lambda_handler , riceverò un errore identico al tuo errore:

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	
  • Questo perché Lambda cerca di trovare server.py nella cartella di primo livello,ma non riesce a trovarlo.

Per poter chiamare correttamente questo Lambda, dobbiamo cambiare il gestore in lambda-api.server.lambda_handler in modo che Lambda possa trovarlo nella cartella.

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