awskrug 정기 세미나 (2016년 9월) - lambda + s3 썸네일 생성 및 운영
TRANSCRIPT
Lambda + S3 썸네일
생성 및 운영AWSKRUG 정기 세미나 (2016년 9월) - 서버리스(Serverless) 아키텍처
정창훈(@seapy)
당근마켓
iOS 개발, 서버는 가끔...
알려진 썸네일 생성 방법
· 원본 이미지가 생성되면 썸네일 생성 후 파일로 저장
· 썸네일 이미지를 요청하는 시점에 실시간으로 생성
썸네일 미리 생성· 썸네일 크기가 변경되면 모든 썸네일을 다시 생성
· 이미지, 썸네일 크기가 다양할수록 많은 저장공간 사용
온디맨드 썸네일 생성썸네일을 미리 생성하는 방법에서 지적된 단점을 해결
· 썸네일 크기 변경에 따른 개발 및 운영 최소
· 저장공간은 이미지 개수 만큼만 사용 (참고 : 서버 비용을 70%나 줄인 온디맨드 리사이징
이야기 — VCNC 엔지니어링 블로그)
온디맨드 썸네일 생성 단점· 한 번에 너무 요청이 몰리면 이미지 변환 실패 가능
(썸네일 크기 변환 같은 경우나 CDN 문제)
· CDN 캐시 전까지는 같은 요청을 반복해서 처리
당근마켓 사례 1refile 젬을 이용해 온디맨드 썸네일 방식 1년 운영
· 중고 특성상 CDN 캐쉬전에 동시 접속
· reflie 젬 특성으로 레일스와 같은 서버 사용 · 이미지 리사이징과 웹서버의 필요자원이 다름
온디맨드는 포기· 소규모라 온디맨드로 인한 저장공간 효율 개선이 낮음
· reflie 사용하면서 겪었던 트라우마 인지 온디맨드에
대한 인식이 개선 안됨 ㅜㅜ
· 서버 운영에 대한 귀찮음
Lambda + S3
S3 장점· 모바일 클라이언트에서 S3로 바로 업로드
· 파일 추가 이벤트로 Lambda 실행
Lambda 장점· 서버 운영이 필요 없다
· 실행시간 기준으로 과금
· 트래픽이 몰려도 알아서 스케일링
네이밍 규칙처음에 규칙을 잘 정해야 나중에 확장가능
경로 기반으로 첫번째 폴더에 따라 서로 다른 사이즈의 썸네일을 생성
Lambda 운영
배포압축파일 생성 스크립트로 zip 생성후 수동 업로드
#!/bin/shzip -r lambda index.js node_modules
로그 확인하기최근 2시간 이내의 Error 로그 출력
$ aws logs filter-log-events \ --start-time `date -v-2H "+%s"`000 \ --log-group-name "/aws/lambda/MakeImageResize" \ --filter-pattern "Error" \ --interleaved \ --output json'
타임아웃 에러에 대한 대처타임아웃은 로그에 자세한 내용을 출력하지 않음
남은 시간이 500ms 이면 에러 콜백 호출
const timeout = setTimeout(() => {callback(new Error(`[FAIL]:${bucket}/${key}:TIMEOUT`));
}, context.getRemainingTimeInMillis() - 500);
// clear 는 코드 종료 시점에 명시적으로 해야함clearTimeout(timeout);
오류처리 및 재시도· 에러가 발생하거나 실패하면 재시도
(메모리 부족, 동시실행 제한, 타임아웃, 기타 에러)· 이벤트 타입과 트리거하는 소스에 따라 다름
· S3의 객체 생성 이벤트 소스는 3번의 재시도
동시 실행갯수 제한· Throttles : 동시에 실행되는 Lambda 개수
· 제한에 걸리면 1 이라고만 표시
· 얼마나 더 필요한지 모름
· 기본값으로 계정 & 지역당 100개
· 사전에 대략 예측해서 미리 Support에 신청 (도쿄 기준 3주)
Apex 같은걸 사용하지 않은 이유?
· 소스코드 다 작성하고 난후에 존재를 알게됨
· 해당 툴의 기능을 공부하는것에 대한 시간 부족
앞으로 하고 싶은거· Lambda + API GW를 이용한 온디맨드 리사이징
· 서울 리전으로 이전 (도쿄의 S3에 객체 추가하면 서울의 S3에 추가 하고
싶은데 -_-a)
발표자료· http://www.slideshare.net/seapy· https://speakerdeck.com/seapy
· "AWS Lambda를 이용한 썸네일 생성 개발 후기" http://bit.ly/2diCYU5
· N42 블로그 https://medium.com/n42-corp
끝.