🧝

Lambdaで「invalid ELF header」エラーが出たときの対処法

2021/02/02に公開

Lambdaでparamikoを使おうとした際に「invalid ELF header」がでて困ったので、
その対処法の一例を記述します。

※sshtunelを使用時も同じ方法で解決できます。

環境

MacOS
Python3.8

原因

paramikoはコードにネイティブバイナリを使用しているらしく、
インストール時に環境に応じてheaderの情報が異なるみたいです。

LambdaはAmazon LinuxなのでMacOSでインストールしたライブラリを使おうとするとエラーがでるようです。

対処法

  1. EC2でAmazon Linux2の環境を構築してそこでインストールしたものをzip化する。
    参考にした記事ではこちらの方法で対処していたのですが、正直めんどくさかったので2番の方法で対処しました。

  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にアップロードすれば使えると思います。

参考

https://dev.classmethod.jp/articles/aws-lambda-paramiko/
https://qiita.com/hayao_k/items/a6fd8ecfb1f937246314

Discussion