"Lambda에서""invalid ELF header""오류 발생 시 대응 방법"

Lambda에서 paramiko를 사용하려고 할 때, "invalid ELF header"때문에 곤란해요.
나는 그 대응법의 한 예를 기술했다.
※ sshutunel 사용 시 동일한 방법으로 해결할 수 있습니다.

컨디션


MacOS
Python3.8

까닭


paramiko가 코드에 로컬 바이너리를 사용한 것 같아요.
설치 시 환경에 따라 헤더의 정보가 다를 것 같습니다.
Lambda는 Amazon Linux로, MacOS에 설치된 라이브러리를 사용할 때 오류가 발생합니다.

대응법


  • EC2에서 Amazon Linux2 환경을 구축하고 설치를 부분적으로 zip화합니다.
    참고로 기사는 이쪽 방법으로 처리했는데 솔직히 귀찮아서 두 번째 방법으로 처리했어요.

  • 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을 람다의 레이어에 올리면 사용할 수 있다.

    참고 자료


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

    좋은 웹페이지 즐겨찾기