Regular Motion

개발자가 상팔자

[AWS] Lambda to generate thumbnails

사용자가 업로드한 이미지를 다양한 용도로 재사용하는 앱을 개발하다보면,

업로드한 이미지에 대해 다양한 사이즈의 Thumbnail을 필요로 하게된다.

따라서 서버는 클라이언트가 업로드한 고해상도 이미지에 대해 여러벌의 Thumbnail을 자동생성해야되는 경우가 발생한다.

하지만 이미지 프로세싱이라는게 CPU와 메모리를 동시에 많이 필요로하는 작업이라,

동시간대에 다수의 사용자가 이미지를 업로드하기 시작하면 서버가 감당하기 어려울 것이다.

그래서 좋은 방법이 없을까 검색을 하다보니, AWS의 Lambda라는 서비스가 위와 같은 상황에서 좋은 해결책이 될 수 있을 것 같다.

(* Lambda는 데이터 트리거 또는 예약된 시간에 원하는 작업을 수행할 수 있는 AWS 서비스다.)

 

아래 그림을 보고 Lambda를 이용해 업로드되는 이미지의 Thumbnail을 자동생성하는 방법을 알아보자.

1. 사용자가 Source Bucket에 이미지를 업로드한다.

2. AWS S3는 ObjectCreated 이벤트를 감지한다.

3. AWS S3에 등록된 Invocation Role은 등록된 Lambda 함수를 호출한다.

4. Lambda 함수의 Execution Role을 통해 Lambda 함수를 실행한다.

5. Lambda 함수는 원본 이미지를 다운로드한 뒤, Thumbnail을 생성하여 Target Bucket에 업로드한다.

 

생각보다 간단하게 AWS의 S3와 Lambda 함수를 이용하여 원본 이미지가 업로드 될 때, 자동으로 Thumbnail을 생성하도록 설정할 수 있다.

다만 현시점(2015.03)에서 아쉬운 부분은 현재 Lambda를 지원하는 Region이 Oregon과 Verginia, Ireland 뿐이라는 사실이다.

물론 Cloud front를 통해 다운로드에 대해서는 속도를 빠르게 가져갈 수 있다.

 

실제 AWS Console에서 수행해야 할 To Do List를 적어보면 아래와 같다.

1. Source Bucket과 Target Bucket을 생성한다. (* Lambda 함수와 동일한 Region에 위치해야 한다.)

2. Invocation role을 생성한다. (* S3 Source Bucket에 부여하기 위해 필요하다.)

3. Execution role을 생성한다. (* Lambda 함수에 부여하기 위해 필요하다.)

4. Lambda 함수를 생성한다. Lambda 함수를 생성하는 방법은 아래 링크에 자세히 나와있다.(* http://docs.aws.amazon.com/lambda/latest/dg/walkthrough-s3-events-adminuser-create-test-function.html)

5. Source Bucket에 Event Notification을 활성화한다.(* http://docs.aws.amazon.com/AmazonS3/latest/UG/SettingBucketNotifications.html)

 

위의 순서대로 진행 한 뒤, 문제가 있으면 CloudWatch의 로그를 참조하면서 문제를 해결해야 한다.

 

5 Comments

  1. 그런데 Lambda 의 지원 region은 크게 문제가 될 것이 없는게 thumbnail을 generate할 떄 조금 느려지는 것 뿐이지 않나요? 즉, 이미지 다운로드시에는 전혀 속도상 문제가 없을 것 같네요 🙂

  2. 아 죄송합니다… lambda 와 s3 bucket이 같은 region에 있어야 하는군요 ㅠㅠ

답글 남기기

© 2017 Regular Motion

Theme by Anders NorenUp ↑