Lambda(Python) を実行すると "Unable to import module '...': No module named ..."
事象
- Lambda(Python) のコードと外部ライブラリを zip に圧縮し、AWSマネジメントコンソールからアップロードして実行すると、"Unable to import module" エラーが発生する
Unable to import module '...': No module named ...
原因
- 親ディレクトリを圧縮したためアップロード後の展開時にディレクトリが作成され、設定している Handler とマッチしていなかっため。
- ディレクトリではなく、ディレクトリの中身を圧縮する必要がある。もしくは、Handler にディレクトリパスを含める。
ディレクトリではなく、ディレクトリの中身を圧縮します。ZIP ファイルの内容は、Lambda 関数の現在の作業ディレクトリとして利用できます (例: /project-dir/codefile.py/lib/yourlibraries)。
デプロイパッケージの作成 (Python) - AWS Lambda
対策
ディレクトリの中身を圧縮する。
コマンドラインでは以下の通り。
- 誤
$ ls lambda_sample $ zip -r lambda_sample lambda_sample
- 正
$ cd lambda_sample $ zip -r ../lambda_sample .
補足
$ zip -r lambda_sample_dir lambda_sample
$ unzip lambda_sample_dir.zip
Archive: lambda_sample_dir.zip
creating: lambda_sample/ ★展開時にサブディレクトリができる
creating: lambda_sample/beautifulsoup4-4.5.1.dist-info/