WiseN

Lambda 활용

Sep 03,2015   |   AWS

작성자_GS Neotek

페이스북 공유하기 트위터 공유하기
Blog thumbnail

다루는 내용


· Lambda 이해
· S3 버킷 생성
· IAM Role 생성
· Lambda function 패키지 생성
· Lambda 수동 실행
· Lambda 자동 실행


 

 

실습






Lambda 이해






 

Lambda는 이벤트에 응답하여 개발자 코드를 실행하고, 자동으로 컴퓨팅 리소스를 관리하여 새로운 정보에 신속하게 대응하는 애플리케이션을 쉽게 개발할 수 있도록 지원하는 컴퓨팅 서비스이다. S3와 Custom APP의 경우 Push 방식으로 동작하며, Kinesis와 DynamoDB의 경우 Pull 방식으로 동작한다.

 

  • S3에서 Lambda로 이벤트 Push


 



 

  • Lambda가 Kinesis의 메시지 Pull


 



 

이번 실습에서는 S3 버킷에 이미지 파일이 업로드 될 경우 Lambda가 이벤트를 받아서 리사이징하고, 결과를 다른 S3 버킷에 저장하도록 한다. 실습에 필요한 준비 사항은 다음과 같다.
· 이미지가 업로드 될 S3 버킷
· 이미지가 리사이징되어 저장 될 S3 버킷
· Lambda 서비스가 실행되는데 필요한 권한(IAM Role)
· 이미지를 리사이징하는 개발자 코드


 

 




S3 버킷 생성






 

1. 두 개의 S3 버킷을 생성하고, Policy를 수정한다.

(이미지 업로드 버킷)


 



 

2) arang-lab (리사이징된 이미지 저장 버킷)


 



 

 




IAM Role 생성






 

1. 콘솔에서 IAM 클릭
2. 왼쪽 메뉴에서 Roles 클릭
3. Create New Role 클릭
4. Set Role Name 페이지에서

1) Role Name : lambda-lab
2) Next Step 클릭


5. Select Role Type 페이지에서

1) AWS Lambda à Select 클릭


6. Attach Policy 페이지에서

1) AWSLambdaExecute 선택
2) Next Step 클릭


7. Review 페이지에서

1) Create Role 클릭


 

 




Lambda function 패키지 생성






 

현재 Lambda는 Node.js와 Java 8을 지원한다.

 



 




 


  • Node.js 코드




1. Node.js 플랫폼 설치

1) EC2 인스턴스 접속
2) https://nodejs.org/ 에서 리눅스용 소스 다운로드
(https://nodejs.org/dist/v0.12.5/node-v0.12.5-linux-x64.tar.gz)
3) 압축을 풀면 bin 디렉토리에 node 파일과 npm 파일이 있다.


2. CreateThumbnail.js 작성

1) AWS 매뉴얼 페이지 참고 (소스를 복사해서 사용하면 된다.)
http://docs.aws.amazon.com/lambda/latest/dg/walkthrough-s3-events-adminuser-create-test-function-create-function.html


 



 

2) 리사이징된 이미지가 저장 될 버킷명으로 수정한다.
var dstBucket = srcBucket + “-lab”


3. 라이브러리 설치

1) node.js package manager를 실행하여 async와 gm을 설치한다.
$ npm install async gm


 



 

4. zip파일로 압축

1) CreateThumbnail.js 파일과 node_modules 라이브러리 디렉토리를 zip으로 압축하여 패키지 파일을 만든다.
$ zip -r CreateThumbnail.zip CreateThumbnail.js node_modules/


5. 패키지 파일 업로드

1) Lambda에서 사용하기 위해 S3에 업로드 해둔다.
$ aws s3 cp ./CreateThumbnail.zip s3://arang


 



 

 




Lambda 수동 실행






 


  • Lambda Function 생성




1. 콘솔에서 Lambda 클릭

2. Get Started Now 클릭
3. Lambda: New function 페이지에서

1) Name : lambda-image-resizing
2) Code entry type : Upload a .ZIP from S3 선택
3) S3 link URL : https://s3-us-west-2.amazonaws.com/arang/ExampleCode/CreateThumbnail.zip 입력
4) Handler : CreateThumbnail.handler 입력
5) Role : lambda-lab 선택
6) Create Lambda function 클릭


4. Actions → Edit/Test 클릭
5. Lambda: Edit/Test lambda-image-resizing 페이지에서

1) Sample event : S3 Put 선택
2) 샘플 수정


 



 

· awsRegion : 테스트 리전으로 수정
· name : 업로드 버킷명으로 수정
· arn : 업로드 버킷의 arn으로 수정
· key : 리사이징이 적용될 파일 명 (arang 버킷내에 있는 이미지 파일 명)


6. Invoke 클릭

이미지 업로드 버킷(arang)에 images.jpg 파일을 리사이징하여 저장 버킷(arang-lab)에 저장한다.
먼저 arang 버킷에 images.jpg 파일을 업로드 후 실행하자.


7. 확인

저장 버킷에 resized-images.jpg 라는 파일이 생성된다.


 



 

 




Lambda 자동 실행






 

1. 콘솔에서 Lambda 클릭
2. Actions → Add event source 클릭
3. Lambda: Publish event notifications to lambda-image-resizing 페이지에서

1) Event source type : S3 선택
2) Bucket : arang 선택
3) Event type : Put 선택
4) Submit 클릭


 



 

Lambda 트리거가 실행중이다. jpg나 png 파일이 업로드 되면 자동으로 리사이징되어 저장된다.


 

 




참고



 

 




Lambda Function의 샘플 Java 코드






 


  • Maven Plugin 설치




1. Eclipse 실행

2. 메뉴에서 Help à Install New Software 클릭

1) Work with : http://download.eclipse.org/technology/m2e/releases 입력
2) Add 클릭
3) Maven Integration for Eclipse 선택
4) Next 클릭


 



 

5) Next 클릭
6) I accept the terms of the license agreement 선택
7) Finish 클릭


 




 


  • Maven Project 생성




1. 메뉴에서 File à New à Project 클릭

2. New Project 창에서

1) Maven Project 선택
2) Next 클릭


3. New Maven Project 창에서

1) Create a simple project 선택
2) Next 클릭
3) Group Id : doc-examples 입력
4) Artifact Id : lambda-java-example 입력
5) Name : lambda-java-example 입력
6) Finish 클릭


 




 


  • Lambda 라이브러리 추가




1. pom.xml에서 마우스 우클릭  à  Maven  à  Add Dependency 클릭

2. Add Dependency 창에서

1) Group Id : com.amazonaws 입력
2) Artifact Id : aws-lambda-java-core 입력
3) Version : 1.0.0 입력
4) OK 클릭


 



 

3. pom.xml에서 마우스 우클릭  à   Maven  à  Add Dependency 클릭
4. Add Dependency 창에서

1) Group Id : com.amazonaws 입력
2) Artifact Id : aws-lambda-java-events 입력
3) Version : 1.0.0 입력
OK 클릭


 



 

5. 프로젝트 하위 디렉토리 src/main/java에서 마우스 우클릭  à  New  à  Class 클릭
6. New Java Class 창에서

1) Name : S3EventProcessorCreateThumbnail 입력
2) Finish 클릭


 



 




 


  • 자바 코드 작성




1. S3EventProcessorCreateThumbnail.java 코드 작성

1) http://docs.aws.amazon.com/lambda/latest/dg/java-wt-s3-log-event-data.html
소스를 복사해서 붙여 넣는다.


 



 

2) 리사이징된 이미지가 저장 될 버킷명으로 수정한다.
String dstBucket = srcBucket + “-lab”
3) 패키지 불일치 에러가 발생하면 수정한다.


 



 




 


  • maven-shade-plugin Maven Plugin 추가




소스를 패키징할 때 라이브러리를 포함하여 standalone .jar 파일을 만들어 준다.

 

1. pom.xml 파일 우클릭  à  Maven  à  Add Plugin 클릭

1) Group Id : org.apache.maven.plugins 입력
2) Artifact Id : maven-shade-plugin 입력
3) Version : 2.3 입력
4) OK 클릭


 



 

2. 프로젝트(lambda-java-example)에서 마우스 우클릭  à   Run As  à  Maven Build 클릭
3. Edit Configuration 창에서

1) Goals : package shade:shade 입력
2) Run 클릭


3. 파일 확인

프로젝트의 target 디렉토리에 lambda-java-example-0.0.1-SNAPSHOT.jar 파일이 생성된다.


 



 

4. Lambda에서 실행확인

실행 시 handler는 example.S3EventProcessorCreateThumbnail 이다.