pyenv, python3, lambda-uploader で AWS Lambda にアップロードするの続き。
Python の numpy や pandas, beautifulsoupなど、Cで作られているライブラリを AWS Lambda で動かしたい。
しかし、Macから lambda-uploader でアップしたらエラーがでてしまった。
“errorMessage”: “Unable to import module ‘lambda_function'”
というエラーがでた。ライブラリが読み込めていないとのこと。
こレラのライブラリは Mac 用でビルドされており、Lambda環境と違うことが原因です。
失敗したやり方は、以下。
vim requirements.txt
beautifulsoup4
あとは、lambda.json, lambda_function.py など必要なものを書く。
アップロードする。
lambda-uploader
こうしたら自分の AWS Lambda に関数が登録されています。
しかし、テストを実行してみても上記エラーが表示されてしまいました。
成功したやり方
C で作られているライブラリを Docker を使ってコンパイルします。
lambdaを開発しているディレクトリで、以下を実行。
docker run --rm -v $(pwd):/work -w /work python:3.6 pip install -r requirements.txt -t .
すると フォルダ内に以下2つのディレクトリが作成されています。
beautifulsoup4-4.6.0.dist-info bs4
この2つを含めて、ディレクトリ内をまとめて zip で固めます。
zip -r lambda_function.zip ./
lambda_function.zipが作成されました。
これを lambda-uploader を使ってアップロードのみで実行します。
lambda-uploader --no-build
これで問題なく動きました。
参考
Mac だけど Python で AWS Lambda したい!
AWS LambdaでPythonのparamikoを使う方法 | DevelopersIO
モバイルアプリサービス部の五十嵐です。 MacでPythonのparamiko(sshのライブラリ)を使ったLambda Functionを作成しデプロイしたところ動かなくて思いのほか大変だったので記事にまとめておきます …
コメント