Serverless

API Gateway with Lambda-"Unable to import module 'server':server' という名前のモジュールがない"

Hello Everyone,

cloud9環境でhttps://github.com/fortejas/example-serverless-python-apiに従ってtypescriptを使用してserverless-apiをセットアップしようとしましたが、デプロイは成功しましたが、RESTAPIエンドポイントにアクセスすると次のようになります。次のエラー

curl -d POST https://8egyaaan6f.execute-api.ap-southeast-2.amazonaws.com/prod/update {"メッセージ":"内部サーバーエラー"}

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

さらに調査すると、エラーはhttps://github.com/fortejas/example-serverless-python-api/blob/main/lambda-api/server.pyに関連しているようです。

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,

エラーメッセージから、Lambda関数はserver.pyファイルにあるHandlerメソッドを見つけることができないようです。Lambdaはserver.pyファイルを検索しようとしますが、見つかりません。Python Lambdaハンドラーの設定について詳しくは、このドキュメントをご覧ください。

Lambda関数を確認し、フォルダ構成を確認し、設定されているHandlerが正しいパスを持っていることを確認してください。

例えば、「PythonLambda」という名前のLambda関数の中に、以下のようなフォルダ構成があるとします。

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)

Lambdaハンドラーが server.lambda_handler の場合、エラーと同じエラーが発生します。

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	
  • これは、Lambdaがトップレベルのフォルダにあるserver.pyを探そうとするが、見つからないためです。

このLambdaを正常に呼び出すことができるようにするには、ハンドラーを lambda-api.server.lambda_handler に変更して、Lambdaがフォルダーの下でハンドラーを見つけられるようにする必要があります。

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	

GPUを向上させたクラウド機能