분명 저와같은 삽질을 겪은분이 있을것이라 생각하며,
조금이나마 도움이 되기위해서 적습니다.
삽질 요약
결론 : 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로 시도해보면 금방 잘될것같음