본문 바로가기

Cloud AWS

Amazon AWS :: Lambda 활용


다루는 내용

  • 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를 수정한다.
    1) arang (이미지 업로드 버킷)
    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 파일이 업로드 되면 자동으로 리사이징되어 저장된다.

참고

※ http://docs.aws.amazon.com/lambda/latest/dg/walkthrough-s3-events-adminuser.html

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 클릭
  4. 파일 확인
    프로젝트의 target 디렉토리에 lambda-java-example-0.0.1-SNAPSHOT.jar 파일이 생성된다.
  5. Lambda에서 실행확인
    실행 시 handler는 example.S3EventProcessorCreateThumbnail 이다.

Arang

Sr. Technical Trainer at GSNeotek