AWS lambda에서 Python으로 PDF를 Image로 변환삽질 후기 - 대충. (feat. container)

우정민·2021년 4월 28일
0

분명 저와같은 삽질을 겪은분이 있을것이라 생각하며,
조금이나마 도움이 되기위해서 적습니다.

삽질 요약

  1. Nodejs로 코드를 작성후 imageMagick을 lambda layers에 올려서 진행
  2. 기억은 잘 안나는데, 어찌됬든 안되드라.
  3. 슬프지만 Python으로 람다 바꾸기 재시도
  4. Python에서는 lambda Layers에 pdf2image를 올려서 사용하고자 하였는데, 의존성 라이브러리중 poppler가 업데이트가 중단에 멈춰서 람다에 안되는것을 확인
  5. Python의 버전도 바꾸어보고, 가상환경(conda)에서 진행하면서 lambda에 업로드 해보았지만
  6. 람다에 도커로 올릴수있는걸 확인
  7. 도커에 pdf2image를 올려서 진행
  8. aws에서 지원하는 람다용 도커의 문제인지 한글이 16진수 언어로 바뀌어서 함수가 적용이 안되는어 pdf가 인식이 안됌
    (이 부분은 해당 container의 한글 인식 문제인지, Python에서의 문제인지 파악하지 않고 시도하다가 넘어감)
  9. 한글을 decode해서 넣어도 적용이 안됌
  10. pdf2image -> wand로 라이브러리 교체
  11. 새로운 라이브러리 사용하다가 멘붕
  12. 어찌어찌 해서 람다에서 pdf를 png로 바꾸는걸 만듬

결론 : lambda에서 뭔가를 올릴려고하면, 대부분 라이브러리의 의존성 문제로 안되는것같다.
마음 편하게 container에 올리면 편안해짐.
container(docker)로 만들면 그 부분은 해결되는것같은데,
아직 알아가야할부분이 많은듯

FROM public.ecr.aws/lambda/python:3.8
# aws에서 만든 python lambda용 container를 가져옴

COPY lambda_function.py ./
# current working directory(cwd)에 있는 lamda_function.py파일을 container의 cwd로 복사  


ENV LANG ko_KR.utf8
ENV LC_ALL ko_KR.utf8
RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
#위의 세줄은 container의 환경을 변경하기위하여 진행하였지만, 쓸모가 있는지는 검증 안해봄


RUN yum -y install ImageMagick-devel
#아마 centOS의 계열인듯, apt-get은 사용안됌, yum으로 imageMagik 설치



RUN pip install wand
# python 전용 container이라서 그런지 pip사용 가능, wand설치

CMD [ "lambda_function.lambda_handler" ]
# 마지막으로, container의 cwd에 복사한 파일명과, 파일 안에있는 작동시킬 method명을 실행시켜준다

이 방법이 좋은것은 로컬에서 테스트하기도 편하다는 것인데,
contianer를 build후 run 시키고 나서 curl을 날리면서 테스트가 가능하다.
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"key":"value"}'
curl로 body값을 날려줄수있다.
작성한 메서드의 event parameter에서 key와 value를 확인하여
로직을 작성후, 원하는 return을 날려주면 된다.

결론

실 사용하고자 하면 api gateway는 연결 해야함
자세히 적으려다가 그냥 후기느낌으로만 남겨놓을까 함
솔직히 로컬에서는 잘되는데, lambda에서만 잘 안되는 경우들이 많을것같아서, container로 시도해보면 금방 잘될것같음

profile
개발을 개발로하는 개발입니다.

0개의 댓글