TIL/삽질 기록소

[Lambda] 람다를 활용한 image resize

JoJobum 2022. 11. 2.

람다를 활용한 image resize 에 관한 내용은 많다 AWS 에서 자체 자습서 자료를 만들었을 정도로 대표적인 활용 방식인 것 같다.

근데 이제 내가 이를 구현하면서 마주했던 에러를 이야기 해보자한다.

문제 상황

1. 그냥 안됨 => 코드상의 문제이다, 파일 경로와 문법 실수를 유의하자

2. 무한 재귀 => 람다 트리거를 잘못 설정한 경우 s3 버킷을 하나로 사용하는데 조건을 이미지가 업로드 시로 통으로 걸어버리면 이미지 리사이징한 것을 올릴 때에도 트리거가 발동되어 무한으로 이미지 리사이징을 즐길 수 있다

 

내가 진짜 골치 아팠던것은 

3. 이미지 리사이징이 진짜 가끔식 되고 대부분의 케이스에서는 제대로 동작하지 않는 경우였다.

코드는 아무리 뜯어봐도 문제가 없고 계속 테스트 해보다 보면 간간히 한 두개는 되는 경우가 발생한다.

나같은 경우에는 width가 각각 480,960이 되게 w_480 과 w_960 두 가지로 이미지 리사이징을 시도했는데 로그를 보면 어떤 경우는 480까지는 된 경우가 보일 것이다 

그외 특이점으로는 계속 반복하고 있다... 그래 반복하는 것이 뽀인트였다

또한 Task timed out after 이라는 로그가 보이는데 이를 놓쳐서 한동안 헤맸다

 

 

해결 방안

timed out 이라는 키워드를 가지고 검색하다 찾은 글에서 해답을 얻을 수 있었다.

node.js - AWS lambda fails by timeout during getting buffer from resized image - Stack Overflow

이 글의 요지는 time out이 나니깐 제한 시간을 늘려 라는 글이였지만 이 글을보고 기본설정에서 람다의 메모리와 제한 시간을 설정할 수 있다는 것을 알게 되고 확인한 결과 기본설정은 메모리는 128MB, 저장용량은 512MB, 제한 시간은 3초로 설정되어있었다.

보자마자 메모리가 너무 작아서 설마?... 싶었는데 맞았다

메모리를 1GB로 올려주니

아주 깔끔하게 잘되는 것을 확인할 수 있었다.

그리고 마지막 리포트를 보니 사용한 최대 메모리가 132MB인 것으로 보아 아슬아슬하게 넘어서 계속 터졌던 것 같다.

그래서 터지다 보니깐 람다가 목표를 수행하기 위해 재실행을 계속한 것으로 추정된다.

반응형

댓글