🧝
Lambdaで「invalid ELF header」エラーが出たときの対処法
Lambdaでparamikoを使おうとした際に「invalid ELF header」がでて困ったので、
その対処法の一例を記述します。
※sshtunelを使用時も同じ方法で解決できます。
環境
MacOS
Python3.8
原因
paramikoはコードにネイティブバイナリを使用しているらしく、
インストール時に環境に応じてheaderの情報が異なるみたいです。
LambdaはAmazon LinuxなのでMacOSでインストールしたライブラリを使おうとするとエラーがでるようです。
対処法
-
EC2でAmazon Linux2の環境を構築してそこでインストールしたものをzip化する。
参考にした記事ではこちらの方法で対処していたのですが、正直めんどくさかったので2番の方法で対処しました。 -
lambci/lambdaを使う
Dockerを使うことでLambda環境をシュミレートしたレイヤーを作成することができました。
requirement.txt
paramiko
$ docker run --rm -v $(pwd):/var/task lambci/lambda:build-python3.8 \
> pip install -r requirements.txt -t python/lib/python3.8/site-packages/
zip -r lambda-layer.zip ./python > /dev/null
あとはできたzipをLambdaのLayerにアップロードすれば使えると思います。
参考
Discussion