이 오류 메시지는 AWS Lambda 환경에서 모듈을 로드할 때 문제가 발생한 경우 나타납니다.
"invalid ELF header" 오류는 주로 라이브러리가 Lambda 실행 환경과 호환되지 않는 플랫폼(예: Windows)에서 빌드되었을 때 발생한다고 하네요 🥲
저의 경우에는 PyJWT 모듈을 사용하기 위해 람다 레이어를 추가하는 과정에서 zip 파일을 만들어줬는데요,
맥에서 다운로드받은 파일이 amazonlinux와 호환되지 않아서 발생했습니다.
이럴경우에는 어떻게 해결할까요?
해결 방법은 간단합니다. 바로 Docker 를 사용하면 됩니다 🤓
간단하게 설명하자면
1. 모듈을 다운로드 받을 폴더를 생성
2. docker로 amazonlinux 컨테이너를 실행
3. 이때 컨테이너와 모듈을 다운로드 받을 폴더를 볼륨으로 연결!!
4. 컨테이너 쉘에서 모듈을 다운로드
5. 컨테이너에서 빠져나온 뒤에
6. 모듈을 zip 파일로 압축하기
이후 압축 파일을 람다 레이어에 추가해주시면 됩니다
간단하죠?
예시 커맨드를 보여드리자면...
1 -> mkdir lambda_layer
2,3 -> docker run -it --rm -v $(pwd)/lambda_layer/:/lambda_layer amazonlinux:2 bash
4 -> yum install -y python3 pip3
-> cd /lambda_layer
-> pip3 install pyjwt -t ./python
5 -> exit
6 -> zip -r pyjwt_layer.zip ./python (이때 pwd는 lambda_layer 폴더입니다)
이렇게 하면 아마존 리눅스와 호환되는 파일이 다운로드되고, 레이어에 추가할 zip 파일도 생성됩니다 🙌
이 zip 파일을 레이어에 추가해주고 람다에 붙여줬더니 저는 더이상 invalid ELF header 에러가 발생하지 않았습니다 🥳