Macで AWS Lambdaで動く Python3 のライブラリを用意する

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を作成しデプロイしたところ動かなくて思いのほか大変だったので記事にまとめておきます …

コメント

タイトルとURLをコピーしました