awskrug 정기 세미나 (2016년 9월) - lambda + s3 썸네일 생성 및 운영

23
Lambda + S3 썸네일 생성 및 운영 AWSKRUG 정기 세미나 (2016년 9월) - 서버리스(Serverless) 아키텍처

Upload: -

Post on 15-Apr-2017

161 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

Lambda + S3 썸네일

생성 및 운영AWSKRUG 정기 세미나 (2016년 9월) - 서버리스(Serverless) 아키텍처

Page 2: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

정창훈(@seapy)

당근마켓

iOS 개발, 서버는 가끔...

Page 3: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

알려진 썸네일 생성 방법

· 원본 이미지가 생성되면 썸네일 생성 후 파일로 저장

· 썸네일 이미지를 요청하는 시점에 실시간으로 생성

Page 4: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

썸네일 미리 생성· 썸네일 크기가 변경되면 모든 썸네일을 다시 생성

· 이미지, 썸네일 크기가 다양할수록 많은 저장공간 사용

Page 5: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

온디맨드 썸네일 생성썸네일을 미리 생성하는 방법에서 지적된 단점을 해결

· 썸네일 크기 변경에 따른 개발 및 운영 최소

· 저장공간은 이미지 개수 만큼만 사용 (참고 : 서버 비용을 70%나 줄인 온디맨드 리사이징

이야기 — VCNC 엔지니어링 블로그)

Page 6: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

온디맨드 썸네일 생성 단점· 한 번에 너무 요청이 몰리면 이미지 변환 실패 가능

(썸네일 크기 변환 같은 경우나 CDN 문제)

· CDN 캐시 전까지는 같은 요청을 반복해서 처리

Page 7: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

당근마켓 사례 1refile 젬을 이용해 온디맨드 썸네일 방식 1년 운영

· 중고 특성상 CDN 캐쉬전에 동시 접속

· reflie 젬 특성으로 레일스와 같은 서버 사용 · 이미지 리사이징과 웹서버의 필요자원이 다름

Page 8: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

온디맨드는 포기· 소규모라 온디맨드로 인한 저장공간 효율 개선이 낮음

· reflie 사용하면서 겪었던 트라우마 인지 온디맨드에

대한 인식이 개선 안됨 ㅜㅜ

· 서버 운영에 대한 귀찮음

Page 9: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

Lambda + S3

Page 10: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

S3 장점· 모바일 클라이언트에서 S3로 바로 업로드

· 파일 추가 이벤트로 Lambda 실행

Page 11: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

Lambda 장점· 서버 운영이 필요 없다

· 실행시간 기준으로 과금

· 트래픽이 몰려도 알아서 스케일링

Page 12: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

네이밍 규칙처음에 규칙을 잘 정해야 나중에 확장가능

경로 기반으로 첫번째 폴더에 따라 서로 다른 사이즈의 썸네일을 생성

Page 13: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영
Page 14: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

Lambda 운영

Page 15: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

배포압축파일 생성 스크립트로 zip 생성후 수동 업로드

#!/bin/shzip -r lambda index.js node_modules

Page 16: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

로그 확인하기최근 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'

Page 17: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

타임아웃 에러에 대한 대처타임아웃은 로그에 자세한 내용을 출력하지 않음

남은 시간이 500ms 이면 에러 콜백 호출

const timeout = setTimeout(() => {callback(new Error(`[FAIL]:${bucket}/${key}:TIMEOUT`));

}, context.getRemainingTimeInMillis() - 500);

// clear 는 코드 종료 시점에 명시적으로 해야함clearTimeout(timeout);

Page 18: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

오류처리 및 재시도· 에러가 발생하거나 실패하면 재시도

(메모리 부족, 동시실행 제한, 타임아웃, 기타 에러)· 이벤트 타입과 트리거하는 소스에 따라 다름

· S3의 객체 생성 이벤트 소스는 3번의 재시도

Page 19: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

동시 실행갯수 제한· Throttles : 동시에 실행되는 Lambda 개수

· 제한에 걸리면 1 이라고만 표시

· 얼마나 더 필요한지 모름

· 기본값으로 계정 & 지역당 100개

· 사전에 대략 예측해서 미리 Support에 신청 (도쿄 기준 3주)

Page 20: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

Apex 같은걸 사용하지 않은 이유?

· 소스코드 다 작성하고 난후에 존재를 알게됨

· 해당 툴의 기능을 공부하는것에 대한 시간 부족

Page 21: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

앞으로 하고 싶은거· Lambda + API GW를 이용한 온디맨드 리사이징

· 서울 리전으로 이전 (도쿄의 S3에 객체 추가하면 서울의 S3에 추가 하고

싶은데 -_-a)

Page 22: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

발표자료· http://www.slideshare.net/seapy· https://speakerdeck.com/seapy

· "AWS Lambda를 이용한 썸네일 생성 개발 후기" http://bit.ly/2diCYU5

· N42 블로그 https://medium.com/n42-corp

Page 23: AWSKRUG 정기 세미나 (2016년 9월) - Lambda + S3 썸네일 생성 및 운영

끝.