45
AWS Lambda 100% 활용하기 김상필 | 솔루션즈 아키텍트

AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

Embed Size (px)

Citation preview

Page 1: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

AWS Lambda 100% 활용하기

김상필 | 솔루션즈 아키텍트

Page 2: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

목차

• 서버리스 아키텍처

• AWS Lambda

• 주요 기능

• 서버리스 아키텍처 설계 패턴

• 모범 사례 및 팁

Page 3: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

서버리스 아키텍처

Page 4: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

진화하는 아키텍처

모노리틱 아키텍처

(Monolithic)

• 획일적

• 자유가 없는

서비스 중심 아키텍처

(SOA)

• 모듈화

• 기능별 분리

마이크로서비스

(Microservices)

• 최소한의 기능 분리

• 신속한 개발/배포

Page 5: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

마이크로서비스 아키텍처를 위한 도구들

웹 서버

코드 라이브러리

웹 서비스/어플리케이션 프레임웍

구성관리 도구

API 관리 플랫폼

배포 패턴

CI/CD 패턴

컨테이너

또 다른 도구, 도구, 도구……

Page 6: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

AWS도함께합니다

Amazon EC2

오토 스케일링

Elastic Load Balancing

EC2의 자동 복구

AWS Trusted Advisor

AWS Elastic Beanstalk

AWS OpsWorks

Amazon EC2 Container Service

수많은 AWS 서비스들……

Page 7: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

…이러한 도구들 및 혁신들의 많은 것들이여전히 공유되는 의존관계 에 얽혀 있습니다.

하지만…

Page 8: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

Servers서버의 물리적인장애를

어플리케이션에서 어떻게 처리하지?

내 서버들에 대한 접근을어떻게 통제할 수 있지?

서버의 수를 언제늘려야 하지?

내 서버의 용량을언제늘려야 하지? 내 예산에 맞는

서버의크기는?

내 서버들의 남아있는 용량은얼마나 되지?

(AAHHHHHHHHH!!)

Page 9: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

서버리스아키텍처

완전 관리형• 프로비져닝 없음• 관리요소 없음• 높은 가용성

개발자 생산성• 중요한 코드에 집중• 빠르게 혁신• 시장에 빠르게 접근

지속적인 스케일링• 자동으로• 스케일 업/다운

Page 10: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

… 부하 증감을 예측하기 어려운 게임

서비스에서는 서버없는 마이크로서비스

아키텍처 접근이 더욱 중요 ...

Page 11: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

AWS Lambda

Page 12: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

AWS Lambda

서버리스, 이벤트처리방식의 컴퓨팅 서비스

Lambda = 서버리스 마이크로서비스

Page 13: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

AWS Lambda : 서버리스컴퓨팅

서버 프로비저닝/운영 없이 코드를 실행; 사용한 컴퓨팅 시간 만큼만 지불.

이벤트로 실행:

• 직접 동기/비동기식 호출

• Amazon S3 버킷에 객체 저장

• Amazon API 게이트웨이를 통한 호출

• 그 외 다양한 이벤트…

다음의 작업을 손쉽게 수행:

• 실시간데이터처리수행

• 유연한백엔드서비스구축

Page 14: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

Lambda : 동작원리

1. 업로드 2. 트리거 3. 실행 4. 사용요금

Page 15: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

데이터 소스

변경 사항 폴링을 위한서버 플릿

소스 리스닝 작업 큐 푸시 작업 큐 풀

데이터 처리를 위한작업자 서버 플릿

부하 대응을위한

오토스케일링

S3 객체Amazon Kinesis 레코드

DynamoDB 테이블SNS 메시지

IoT 장치…

고가용성을위한 다중가용영역

분산

트래픽분산을 위한로드밸런서

서버를 통한 데이터 처리 아키텍처

어플리케이션 코드

Page 16: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

데이터 소스Lambda 함수 연결

이것으로 끝!

Lambda가 수행

리스닝/폴링작업 큐 관리오토스케일링

고가용성로드 밸런싱

서버리스 데이터 처리 아키텍처

어플리케이션 코드

Page 17: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

데모

Page 18: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

Amazon S3 Bucket Events AWS Lambda

Original image Thumbnailed image

1

2

3

데모: 이미지리사이징

Tutorial: Using AWS Lambda with Amazon S3 -

http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html

Page 19: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

데모: 서버리스비디오스트리밍아키텍처

AWS

Lambda

Amazon S3

비디오파일입수

PUT 이벤트Lambda 트리거

Amazon Elastic

Transcoder

트랜스코딩Job 시작

Amazon S3

여러 bit-rate

HLS 스트리밍

Amazon

CloudFront

시청자

Page 20: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

주요 기능

Page 21: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

Lambda : 동작원리

Bring your own code

• Node.js, Java, Python

• Java = Scala, Clojure 등의어떠한 JVM기반 언어.

• Bring your own libraries

유연한호출경로

• Event 혹은RequestResponse 호출옵션

• 여러 AWS 서비스들과통합

단순한자원모델

• 128MB부터 1.5GB까지64MB 단위로 메모리 설정

• 할당된 메모리에 비례하여CPU 및 네트웍 자원 할당

• 실제 사용량 내역 보고

효과적인권한통제

• AWS IAM (Identity and

Access Management)

Role을 사용한 실행 권한설정

• AWS 이벤트 소스에 대한자원 정책

Page 22: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

Lambda : 동작원리

제작기능• AWS SDK 포함• 인바운드 네트웍 처리• 프로세스, 쓰레드, /tmp,

소켓 …

배포옵션• 콘솔의 WYSIWIG

편집기를 사용하여 직접제작/배포

• 코드를 zip 파일로 묶어Lambda 서비스 혹은S3로 전송

Stateless 기능

• S3/Amazon

DynamoDB/Amazon

ElastiCache를 사용한 저장

• 인프라스트럭쳐와의연관성 없음 (로그인 불가)

모니터링및로깅

• Amazon CloudWatch

메트릭 – 요청 수, 에러 수,

처리 시간, 처리량

• Amazon CloudWatch

Log를 사용하여 로깅

Page 23: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

리소스 사이징

• 23가지 “power levels” 제공

• 높은 레벨일수록 더 많은 메모리와 CPU 파워 제공

• 128 MB, 가장 낮은 CPU 파워

• 1.5 GB, 가장 높은 CPU 파워

• 더 높은 파워 레벨 = CPU를 많이 쓰거나 갑자기 실행되는 작업에 더빠른 실행 시간

• 가격은 파워 레벨에 따라 변화

• 100ms부터 5분(300초)까지 코드 실행

• 프리티어 : 백만 건 무료 처리, 400,000GB-s/월 무료 처리

Page 24: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

예약 Lambda 함수

• 특정 시간에 수행 혹은 반복되는주기로 수행

• 실행 주기 단위로 설정

• 또는, 표준 cron syntax 사용

• Amazon SQS 혹은 다른 데이터소스를 폴링

• CLI와 SDK 지원

Page 25: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

VPC 접근

• Lambda 함수를 실행할 VPC 선택

• VPC 접근 시 사용할 서브넷 및 보안 그룹 선택

• 사용자의 Lambda 함수가 프라이빗 자원에 접근 가능• Amazon Elasticache

• Amazon RDS

• 프라이빗 EC2 엔드포인트

• VPC 내 모든 자원

Page 26: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

배포 관리: 버저닝 - 개발

Labmda function에 하나 이상의 버전 퍼블리싱

Lambda 함수 배포는 여전히 손쉬움:• 변경 시 코드 업로드

• 변경 적용

• 마지막 업데이트가 최신

exports.handler =

function(event,context)

{context.succeed(“bye”);}

exports.handler =

function(event,context)

{context.succeed(“hi”);}

Page 27: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

배포 관리: 버저닝 - 배포

효과적인 프로덕션 Lambda 함수 코드 관리

개발 중 필요 시 마다 신규 버전 배포:• 개발 버전을 번호 버전으로 복제 배포

• 배포된 버전은 읽기 전용 (구성 포함)

• 함수 별 간단한, 정수 버전

exports.handler =

function(event,context)

{context.succeed(“bye”);}

exports.handler =

function(event,context)

{context.succeed(“hi”);}1

2Versions

Page 28: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

배포 관리: 버저닝 - 별칭

서로 다른 버전에 대한 변경 가능한 별칭 사용

특정 버전에 대하여 이름으로 별칭(alias) 지정• 함수 소유자가 ARNs를 코드에 매핑

• 클라이언트 변경 없이 업데이트 가능

exports.handler =

function(event,context)

{context.succeed(“bye”);}

exports.handler =

function(event,context)

{context.succeed(“hi”);}prod

devAliases

Page 29: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

배포 관리: 버저닝 – Lambda 함수 호출

다양한 버전의 Lambda 함수 사용: 개발, 베타, 프로덕션

개발 버전:FunctionName (or)

FunctionName:$LATEST

특정 버전:FunctionName:1

FunctionName:2

명명된 버전:FunctionName:production

FunctionName:v1_2_3_4

Page 30: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

서버리스 아키텍처 설계 패턴

Page 31: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

서버리스 웹 앱 : API Gateway + Lambda

정적 컨텐츠 제공 : S3

동적 컨텐츠 제공 : Lambda

HTTPS 억세스 및 인터페이스 : API Gateway

저장소 : DynamoDB

Dynamic Content

in AWS Lambda

Data Stored in

Amazon

DynamoDB

API GatewayStatic content in

Amazon S3

Page 32: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

비동기 프로세싱: S3 + Lambda

New data

available

Amazon S3 AWS Lambda Amazon S3

Page 33: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

데이터베이스 트리거: DynamoDB + Lambda

New data

available

Amazon DynamoDB AWS Lambda

Amazon

DynamoDB

Amazon

Redshift

Page 34: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

실시간 분석 처리: Kinesis + Lambda

고속 대용량 데이터 수집 : Kinesis

Lambda 내 “Kinesis” 블루프린트 활용

수집 및 집계 결과 저장 : Redshift, S3, DynamoDB

Data Ingestion with

Amazon Kinesis

(PUT record)

Records retrieved by

AWS Lambda

Your code runs once

per [batch of] records

Amazon

S3

Amazon

DynamoDB

Smart Devices

Click

Stream

Log

Data

Amazon

Redshift

Page 35: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

서버리스 폴링: SQS + Lambda

AWS Lambda

Scheduled

Job

Amazon SQS

(or rabbitMQ

or webhook)

Page 36: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

백엔드 : AWS IoT + AWS Lambda

Page 37: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

다양한 Lambda 트리거

AWS

CloudFormation

Custom Resources

Amazon SES

Actions

Amazon Cognito

Sync Triggers

… and the list will

continue to grow!

AWS IoT ActionsAWS Lambda

Scheduled EventsAmazon Echo

Skills

Amazon SWF

Tasks

Page 38: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

모범 사례 및 팁

Page 39: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

AWS Lambda 모범 사례 및 팁

1. 함수의 크기 제한• 특히 Java (JVM 시작 시간 소요)

• 함수가 또다른 ‘monolith’가 되지 않도록 주의

• 첫번째 실행은 시간이 걸릴 수 있음 (스케줄 기반 Lambda 활용)

2. Node – 비동기(asynchronous) 실행에 주의

3. 컨테이너 재사용을 가정하지 말 것• Lambda 컨테이너가 재사용될 수도 있음.

• 그러나 어플리케이션에서 가정하지 말 것 (Stateless 유지)

• 그러나 컨테이너 재사용시에 구성 로딩, 커넥션 유지, 인-메모리 캐시 등 활용가능

Page 40: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

AWS Lambda 모범 사례 및 팁

4. 내장 디스크 (/tmp) 활용 가능

5. 배포를 위하여는 함수에 대하여 명명 규칙/버전/별칭 등 사용

6. 내장된 로깅을 활용• 서비스 제공 컨텍스트에 대한 디테일 포함

7. 필요 시 커스텀 메트릭 생성• 운영 또는 비지니스 중심

8. Role 활용하여 권한 관리

9. 구성 정보 등은 외부에 관리 가능• DynamoDB 활용 가능

Page 41: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

지금 바로 해보세요

Page 42: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

Go build something!

Amazon API

GatewayAWS Lambda Amazon

DynamoDB

Page 43: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

206년 10월 14일(금) | 강남구 역삼동 GS타워 12층

Zombie Apocalypse Workshop 서버리스 마이크로서비스 구축 워크샵 - 서울(Seoul)

https://aws.amazon.com/ko/events/zombie-reg-seoul-oct-2016/

Page 44: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

감사합니다

Page 45: AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016