LoginSignup
0
0

More than 3 years have passed since last update.

AWS Lambdaでネイティブライブラリを含む場合の環境

Posted at

はじめに

Pythonの依存ライブラリにおいてネイティブライブラリを使う場合は、
ビルド(pipする)する環境と、AWS Lambda側の環境を揃えておくという話は昔から聞いていました。

ただ、実際に何がどう影響してダメなのか?全然調べたこともなかったので、
ハマったついでにpip installで取得したライブラリを確認してみたメモです。

Lambda実行時に発生したエラー

エラー内容

pyprojという距離計算を行うモジュールを使用した場合に発生しました。

(このエラーだけ見ても、最初は何が悪いか全然分かりませんでしたが。。。)

[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_handler': cannot import name '_datadir' from partially initialized module 'pyproj' (most likely due to a circular import) (/var/task/pyproj/__init__.py)

エラー発生時の環境

エラー解消時の環境

pyprojライブラリの中身(一部抜粋)

細かいインストールの仕組みは理解できていませんが、環境を自動的に把握して、
依存するネイティブライブラリをダウンロードしているようでした。

ビルド環境がDockerImage Python3.7

pyproj
- _crs.cpython-37m-x86_64-linux-gnu.so
- _datadir.cpython-37m-x86_64-linux-gnu.so
- proj.py

ビルド環境がDockerImage Python3.8

pyproj
- _crs.cpython-38m-x86_64-linux-gnu.so
- _datadir.cpython-38m-x86_64-linux-gnu.so
- proj.py

ビルド環境がWindows Python3.7インストール(おまけ)

pyproj
- _crs.cp37-win32.pyd
- _datadir.cp37-win32.pyd
- proj.py

さいごに

少しだけ理解というか自身の納得感が深まりました。
ただ、amazonlinuxの公式DockerImageが配布されているので、ビルド環境はそちらにすべきなのかもです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0