Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo

1

© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
김현민, MEGAZONE
Serverless Architecture
S3, Lambda, API Gateway

2

본 강연에서 다룰 내용
서버리스 아키텍쳐의 등장 배경
Amazon S3 소개
AWS Lambda 소개
AWS API Gateway 소개
서버리스 아키텍쳐 구조 소개
서버리스 아키텍쳐 개발 프레임워크 소개

3

Serverless Architecture

4

물리적인 서버 (On-Premise)
• 테스트 환경과 운영환경이 서로 다르다
• 운영환경은 주기적으로 업데이트가 필요함
• 느린 개발주기
• 폴리글랏 프로그래밍에 친숙하지 않음
• 배포하는데 몇 주가 걸리고, 배포가 수년간 지속됨

5

가상 서버 (Virtual Machine)
• 운영환경은 변하지 않음
• 신속한 개발 주기 및 배포가 가능함
• Multi-tenancy
• 폴리글랏 프로그래밍에 친숙함
• 배포하는데 몇 분이 걸리고, 배포가 몇 주간 지속됨
Amazon EC2

6

컨테이너 (Containers)
• 테스트 환경과 운영환경이 동일함
• 운영환경은 변하지 않음
• 좀 더 신속한 반복 및 배포
• High multi-tenancy
• 폴리글랏 프로그래밍에 친숙함
• 몇 초 만에 배포되고, 몇 시간 동안 유지됨
Amazon
ECS

7

서버리스 (Serverless)
• 컴퓨팅의 최소 단위
• 높은 확장성
• 신속한 개발 반복
• Extreme multi-tenancy
• 매우 쉽게 공동 작업을 할 수 있음
• 독립적으로 배포되고, 몇 초 동안 유지됨
AWS
Lambda

8

Amazon의 서버리스 에코 시스템
Lambda
SNS
SQS
DynamoDB
S3
Kinesis

9

서버리스란?
• 아직 서버가 있지만, 더 이상 관리하지 않음
• 또한 더 이상 서버에 액세스 하지 않는다는 의미
• 따라서 개발자가 따로 서버 설정이나 최적화를 할
필요가 없습니다

10

서버리스 컴퓨팅이란?
• 가상머신
• 가상머신이 확장 단위
• 하드웨어 추상화
• 컨테이너
• 어플리케이션이 확장 단위
• 운영체제 추상화
• 서버리스
• 함수가 확장 단위
• 프로그래밍 언어 런타임 추상화
EC2
ECS
Lambda

11

어떻게 선택해야할까요?
• 가상머신
• “CPU, 스토리지, 네트워크 및
내가 원하는 OS를 구성하고 싶다”
• 컨테이너
• “서버를 실행하고, 어플리케이션을
구성하고, 확장을 제어하고 싶다”
• 서버리스
• “필요할때만 내 코드를 실행함”
EC2
ECS
Lambda

12

서버리스 컴퓨팅은 신속한
반복 작업을 도와주고
운영 및 관리의 부담을 제거
하여 전체 개발 속도를
높여줍니다

13

Amazon S3

14

Amazon Simple Storage Service(S3)의 장점
• 2006 AWS 시작시, 가장 범용적인 서비스로 시작
• 무제한 용량의 내구성 높은 객체 스토리지로서 다양한 쓰임새
• 정적 웹호스팅, 이미지/동영상 저장, 로그 저장, VM 이미지 백업 등
단순함 확장성 낮은 비용 신뢰성 빠른 속도

15

AWS Lambda

16

AWS Lambda란?
높은 확장성 및
빠른 서비스 연동
서버 필요 없이
코드만 배포
함수 실행 시
100ms 단위 과금
서버 없는, 이벤트 처리 방식의 컴퓨팅 서비스
Lambda = 클라우드 함수 기반 마이크로서비스

17

인프라의 관리가 불필요
• 실행 기반은 모두 AWS가 관리
• 비즈니스 로직에 집중
• 코드를 업로드 하기만 하면, 나머지는
AWS Lambda가 다음을 핸들링
– Capacity
– Scale
– Deploy
– 복원력
– 모니터링
– 로깅
– 보안패치적용

18

자동확장 (Auto Scale)
• 이벤트의 발생 빈도에 따라
자동으로 확장
• 프로비저닝 중이거나 완료를
신경 쓸 필요 없음
• 코드를 실행한만큼 비용 지불
• 이벤트 기반 호출 옵션
(여러 AWS서비스들과 통합)
• REST API 호출 가능

19

Bring your own code
Node.js/Java로 작성된 코드를 실행
(Python, C#도 가능)
Java = Scala, Clojure등의 JVM 기반 언어도 가능
• 128MB 부터 1.5GB 까지 64MB 단위로 메모리
설정
• 할당된 메모에 비례하여 CPU 및 네트워크 자원
할당
• 코드내에서 다음과 같은 기능도 가능
– 쓰레드/프로세스 생성
– 배치 스크립트와 실행 파일의 실행
– /tmp 폴더의 읽기/쓰기
• 각종 라이브러리도 이용 가능
– 네이티브 라이브러리도 가능
– 사용하는 라이브러리를 함께 업로드

20

효과적인 권한 통제
• AWS IAM (Identity and Access
Management) Role을 사용한
실행 권한 설정
• AWS 이벤트 소스에 대한 자원
정책

21

요금 체계
• 100 밀리 세컨드(ms) 단위로 컴퓨팅
시간에 대한 가격 설정
• 요청건에 대한 소액 결제
• 충분한 무료 범위
• 유휴 상태 중에는 청구하지 않음

22

이용 사례

23

썸네일 생성 및 크기 조절
• S3에 이미지가 업로드 됐을 때 썸네일 이미지
생성 및 크기 조정을 수행
AWS LambdaAmazon S3 Bucket 이벤트
원본이미지
1
썸네일이미지
3
2

24

값 체크 및 다른 테이블에 복사
• DynamoDB에 쓰기에 따라 값 체크를 하고 다른
테이블의 업데이트나 푸시 알림을 실행
AWS Lambda
Amazon DynamoDB
Table and Stream 푸시알림
다른 테이블을
업데이트

25

감사(Audit) 및 알림
AWS API 호출
• S3에 저장된 CloudTrail 로그를 분석하고, 이상
한 행동이나 장애가 감지되면 알려줍니다
AWS CloudTrail Logs
AWS Lambda
Bucket이벤트 푸시 알림

26

사진 공유 모바일 어플리케이션
Followers
6. Push알림
- 친구과 팔로워에게 통지
Cognito
1. 인증・인가
・ 페이스북 응용
프로그램과 연계
Mobile Analytics
DynamoDB
4. 메타데이터를 DynamoDB에 등록
- 제목, 코멘트 등
S3
SNS7. 이미지를 게시하는것을 Analytics에 등록
3. 이미지 크기 조정
2. S3에 이미지 업로드
5. 결과를 SNS로 통지
App with AW
S Mobile SDK

27

모션 센서를 이용한 데이터 수집 및 시각화
• 가속도 센서의 값을 Kinesis에 저장하고, Lambda에서 계산하고, 결과
를 DynamoDB에 저장
• PC 브라우저에서 얻은 결과를 실시간으로 시각화
SmartPhone
with
JavaScriptSD
K
DynamoDBS3
1. HTML/JS
4. 센서의 결과를 기록
3. Function시작
Amazon Kinesis
2. 센서의 값을 얻어서 PUT
Lambda
JavaScript
SDK
5. HTML/JS
6. 데이터를 검색해서 JS로 시각
화

28

API 서버의 대안으로 이용
• 예를들어, 사용자에 따라 콘텐츠를 다르게 보여준다면
• 동기 호출로 실현
DynamoDB
1. HTML/JS
S3
4. URL을 바탕으로 콘텐츠
검색
JavaScript
SDK
4. 사용자 기반 콘텐츠 (URL) 취득
Lambda
3. 콘텐츠 요청
App with
AWS Mobile
SDK

29

Data transformation

30

이벤트 기반 배치 Analytics

31

PlayOn! Sports – Video Stream Processing
Laptop
Encoders
HLS
S3
Playback
VOD Stream
mobile client
CloudFront
Streaming
Live stream
mobile client
CloudFront S3 Ingest
480p
Transcode
360p
Transcode
Audio-only
Transcode
Thumbnail
QOS
Analytics
Cascading Lambda Functions
HQ Copy

32

API Gateway

33

모놀리식 아키텍처
Client
Database Schema
LB Customers OrdersInvoices

34

모놀리식 아키텍쳐의 장점과 단점
• 장점
• 단순한 형태의 작은 코드베이스
• 빠른 개발 속도
• 쉬운 테스트
• IDE 지원
• 단점
• 코드가 많아질수록 부담
• 시간이 지날수록 느려짐
• 혁신하기가 더 어렵다
• 높은 코드 학습 곡선

35

마이크로서비스 아키텍쳐
Client
DB
Schema
LB
Customers
Orders
Invoices
LB
LB
Customers
Orders
Invoices
DB
Schema
DB
Schema
Event Handler + Workers

36

마이크로서비스 아키텍쳐 장점과 단점
• 장점
• 대규모 응용 프로그램을 위한 더 나은 아키텍쳐
• 장기적으로 개발 속도 향상
• 마이크로서비스 : 학습하기 쉽다
• 확장성 및 오류 제어를 위한 격리
• 단점
• 더 많이 변화하는 부분 발생
• 복잡한 인프라 요구사항
• 일관성 및 가용성
• 테스트 하기가 더 어렵다

37

API Gateway 패턴
Client
DB
Schema
LB
Customers
Orders
Invoices
LB
LB
Customers
Orders
Invoices
DB
Schema
DB
Schema
API
Gateway

38

Amazon API Gateway
• 여러 버전 및 스테이징
• API 키 생성 및 배포계획 설정
• 요청의 서명과 인증기능 사용
• 요청 쓰로틀링 및 모니터링
• 백엔드로 AWS Lambda를 이용 가능

39

Amazon API Gateway의 장점
• 응답을 캐싱할 수 있음
• CloudFront를 이용해서 대기시간을 줄이고 DDoS
공격에 대비 가능
• iOS, Android 및 Javascript용 SDK를 자동 생성
• Swagger 지원
• Request / Response의 데이터 변환

40

일반적인 3-Tier 웹 어플리케이션
프레젠테이션 계층 논리 계층 데이터 저장소 계층
Web서버/어플리케이션서버브라우저/모바일 데이터베이스

41

AWS에서 웹 어플리케이션을 만드는 경우

42

서버리스 스택으로 변경

43

프론트엔드의 통일

44

DDoS 공격으로부터 네트워크 보호

45

덧붙여서 Lambda의 기능은...
• 단독으로 배포/실행이 가능
• 각각의 기능은 독립적으로 실행
• 기능에 대해 개별적으로 언어와 데이터 저장소를 선택
가능
자연적으로 마이크로서비스 아키텍쳐로 다가감

46

Serverless Architecture - 김현민

47

Serverless Architecture - 김현민

48

Serverless Architecture - 김현민

49

Serverless Architecture - 김현민

50

Serverless Architecture - 김현민

51

Serverless Architecture - 김현민

52

Amazon API Gateway
+
AWS Lambda

53

Amazon API Gateway
+
AWS Lambda
=
가장 쉽고 빠르게
마이크로서비스 아키텍쳐로
개발하는 방법

54

Serverless Frameworks

55

Serverless Frameworks의 출현
https://github.com/serverless/serverless https://github.com/claudiajs/claudia

56

Serverless Frameworks의 출현
https://www.zappa.io/ https://github.com/awslabs/chalice

57

마무리
AWS Lambda를 통해서 서버 관리가 필요 없는 클라우드
함수 실행 가능
Amazon API Gateway를 통한 손쉬운 API 관리 가능
AWSLambda + API Gateway + 다른 AWS 관리형 서비스
= Serverless Architecuture 로 진화 가능!

58

무엇이든 개발해 보세요!!
Amazon API
Gateway
AWS Lambda Amazon
DynamoDB

59

@awskrug
#AWSKRUG 해시태그로 소셜 미디어에
여러분의 행사 소감을 올려주세요.
Question?

60

@awskrug
#AWSKRUG 해시태그로 소셜 미디어에
여러분의 행사 소감을 올려주세요.
감사합니다

More Related Content

Serverless Architecture - 김현민

  • 1. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 김현민, MEGAZONE Serverless Architecture S3, Lambda, API Gateway
  • 2. 본 강연에서 다룰 내용 서버리스 아키텍쳐의 등장 배경 Amazon S3 소개 AWS Lambda 소개 AWS API Gateway 소개 서버리스 아키텍쳐 구조 소개 서버리스 아키텍쳐 개발 프레임워크 소개
  • 4. 물리적인 서버 (On-Premise) • 테스트 환경과 운영환경이 서로 다르다 • 운영환경은 주기적으로 업데이트가 필요함 • 느린 개발주기 • 폴리글랏 프로그래밍에 친숙하지 않음 • 배포하는데 몇 주가 걸리고, 배포가 수년간 지속됨
  • 5. 가상 서버 (Virtual Machine) • 운영환경은 변하지 않음 • 신속한 개발 주기 및 배포가 가능함 • Multi-tenancy • 폴리글랏 프로그래밍에 친숙함 • 배포하는데 몇 분이 걸리고, 배포가 몇 주간 지속됨 Amazon EC2
  • 6. 컨테이너 (Containers) • 테스트 환경과 운영환경이 동일함 • 운영환경은 변하지 않음 • 좀 더 신속한 반복 및 배포 • High multi-tenancy • 폴리글랏 프로그래밍에 친숙함 • 몇 초 만에 배포되고, 몇 시간 동안 유지됨 Amazon ECS
  • 7. 서버리스 (Serverless) • 컴퓨팅의 최소 단위 • 높은 확장성 • 신속한 개발 반복 • Extreme multi-tenancy • 매우 쉽게 공동 작업을 할 수 있음 • 독립적으로 배포되고, 몇 초 동안 유지됨 AWS Lambda
  • 8. Amazon의 서버리스 에코 시스템 Lambda SNS SQS DynamoDB S3 Kinesis
  • 9. 서버리스란? • 아직 서버가 있지만, 더 이상 관리하지 않음 • 또한 더 이상 서버에 액세스 하지 않는다는 의미 • 따라서 개발자가 따로 서버 설정이나 최적화를 할 필요가 없습니다
  • 10. 서버리스 컴퓨팅이란? • 가상머신 • 가상머신이 확장 단위 • 하드웨어 추상화 • 컨테이너 • 어플리케이션이 확장 단위 • 운영체제 추상화 • 서버리스 • 함수가 확장 단위 • 프로그래밍 언어 런타임 추상화 EC2 ECS Lambda
  • 11. 어떻게 선택해야할까요? • 가상머신 • “CPU, 스토리지, 네트워크 및 내가 원하는 OS를 구성하고 싶다” • 컨테이너 • “서버를 실행하고, 어플리케이션을 구성하고, 확장을 제어하고 싶다” • 서버리스 • “필요할때만 내 코드를 실행함” EC2 ECS Lambda
  • 12. 서버리스 컴퓨팅은 신속한 반복 작업을 도와주고 운영 및 관리의 부담을 제거 하여 전체 개발 속도를 높여줍니다
  • 14. Amazon Simple Storage Service(S3)의 장점 • 2006 AWS 시작시, 가장 범용적인 서비스로 시작 • 무제한 용량의 내구성 높은 객체 스토리지로서 다양한 쓰임새 • 정적 웹호스팅, 이미지/동영상 저장, 로그 저장, VM 이미지 백업 등 단순함 확장성 낮은 비용 신뢰성 빠른 속도
  • 16. AWS Lambda란? 높은 확장성 및 빠른 서비스 연동 서버 필요 없이 코드만 배포 함수 실행 시 100ms 단위 과금 서버 없는, 이벤트 처리 방식의 컴퓨팅 서비스 Lambda = 클라우드 함수 기반 마이크로서비스
  • 17. 인프라의 관리가 불필요 • 실행 기반은 모두 AWS가 관리 • 비즈니스 로직에 집중 • 코드를 업로드 하기만 하면, 나머지는 AWS Lambda가 다음을 핸들링 – Capacity – Scale – Deploy – 복원력 – 모니터링 – 로깅 – 보안패치적용
  • 18. 자동확장 (Auto Scale) • 이벤트의 발생 빈도에 따라 자동으로 확장 • 프로비저닝 중이거나 완료를 신경 쓸 필요 없음 • 코드를 실행한만큼 비용 지불 • 이벤트 기반 호출 옵션 (여러 AWS서비스들과 통합) • REST API 호출 가능
  • 19. Bring your own code Node.js/Java로 작성된 코드를 실행 (Python, C#도 가능) Java = Scala, Clojure등의 JVM 기반 언어도 가능 • 128MB 부터 1.5GB 까지 64MB 단위로 메모리 설정 • 할당된 메모에 비례하여 CPU 및 네트워크 자원 할당 • 코드내에서 다음과 같은 기능도 가능 – 쓰레드/프로세스 생성 – 배치 스크립트와 실행 파일의 실행 – /tmp 폴더의 읽기/쓰기 • 각종 라이브러리도 이용 가능 – 네이티브 라이브러리도 가능 – 사용하는 라이브러리를 함께 업로드
  • 20. 효과적인 권한 통제 • AWS IAM (Identity and Access Management) Role을 사용한 실행 권한 설정 • AWS 이벤트 소스에 대한 자원 정책
  • 21. 요금 체계 • 100 밀리 세컨드(ms) 단위로 컴퓨팅 시간에 대한 가격 설정 • 요청건에 대한 소액 결제 • 충분한 무료 범위 • 유휴 상태 중에는 청구하지 않음
  • 23. 썸네일 생성 및 크기 조절 • S3에 이미지가 업로드 됐을 때 썸네일 이미지 생성 및 크기 조정을 수행 AWS LambdaAmazon S3 Bucket 이벤트 원본이미지 1 썸네일이미지 3 2
  • 24. 값 체크 및 다른 테이블에 복사 • DynamoDB에 쓰기에 따라 값 체크를 하고 다른 테이블의 업데이트나 푸시 알림을 실행 AWS Lambda Amazon DynamoDB Table and Stream 푸시알림 다른 테이블을 업데이트
  • 25. 감사(Audit) 및 알림 AWS API 호출 • S3에 저장된 CloudTrail 로그를 분석하고, 이상 한 행동이나 장애가 감지되면 알려줍니다 AWS CloudTrail Logs AWS Lambda Bucket이벤트 푸시 알림
  • 26. 사진 공유 모바일 어플리케이션 Followers 6. Push알림 - 친구과 팔로워에게 통지 Cognito 1. 인증・인가 ・ 페이스북 응용 프로그램과 연계 Mobile Analytics DynamoDB 4. 메타데이터를 DynamoDB에 등록 - 제목, 코멘트 등 S3 SNS7. 이미지를 게시하는것을 Analytics에 등록 3. 이미지 크기 조정 2. S3에 이미지 업로드 5. 결과를 SNS로 통지 App with AW S Mobile SDK
  • 27. 모션 센서를 이용한 데이터 수집 및 시각화 • 가속도 센서의 값을 Kinesis에 저장하고, Lambda에서 계산하고, 결과 를 DynamoDB에 저장 • PC 브라우저에서 얻은 결과를 실시간으로 시각화 SmartPhone with JavaScriptSD K DynamoDBS3 1. HTML/JS 4. 센서의 결과를 기록 3. Function시작 Amazon Kinesis 2. 센서의 값을 얻어서 PUT Lambda JavaScript SDK 5. HTML/JS 6. 데이터를 검색해서 JS로 시각 화
  • 28. API 서버의 대안으로 이용 • 예를들어, 사용자에 따라 콘텐츠를 다르게 보여준다면 • 동기 호출로 실현 DynamoDB 1. HTML/JS S3 4. URL을 바탕으로 콘텐츠 검색 JavaScript SDK 4. 사용자 기반 콘텐츠 (URL) 취득 Lambda 3. 콘텐츠 요청 App with AWS Mobile SDK
  • 31. PlayOn! Sports – Video Stream Processing Laptop Encoders HLS S3 Playback VOD Stream mobile client CloudFront Streaming Live stream mobile client CloudFront S3 Ingest 480p Transcode 360p Transcode Audio-only Transcode Thumbnail QOS Analytics Cascading Lambda Functions HQ Copy
  • 34. 모놀리식 아키텍쳐의 장점과 단점 • 장점 • 단순한 형태의 작은 코드베이스 • 빠른 개발 속도 • 쉬운 테스트 • IDE 지원 • 단점 • 코드가 많아질수록 부담 • 시간이 지날수록 느려짐 • 혁신하기가 더 어렵다 • 높은 코드 학습 곡선
  • 36. 마이크로서비스 아키텍쳐 장점과 단점 • 장점 • 대규모 응용 프로그램을 위한 더 나은 아키텍쳐 • 장기적으로 개발 속도 향상 • 마이크로서비스 : 학습하기 쉽다 • 확장성 및 오류 제어를 위한 격리 • 단점 • 더 많이 변화하는 부분 발생 • 복잡한 인프라 요구사항 • 일관성 및 가용성 • 테스트 하기가 더 어렵다
  • 38. Amazon API Gateway • 여러 버전 및 스테이징 • API 키 생성 및 배포계획 설정 • 요청의 서명과 인증기능 사용 • 요청 쓰로틀링 및 모니터링 • 백엔드로 AWS Lambda를 이용 가능
  • 39. Amazon API Gateway의 장점 • 응답을 캐싱할 수 있음 • CloudFront를 이용해서 대기시간을 줄이고 DDoS 공격에 대비 가능 • iOS, Android 및 Javascript용 SDK를 자동 생성 • Swagger 지원 • Request / Response의 데이터 변환
  • 40. 일반적인 3-Tier 웹 어플리케이션 프레젠테이션 계층 논리 계층 데이터 저장소 계층 Web서버/어플리케이션서버브라우저/모바일 데이터베이스
  • 45. 덧붙여서 Lambda의 기능은... • 단독으로 배포/실행이 가능 • 각각의 기능은 독립적으로 실행 • 기능에 대해 개별적으로 언어와 데이터 저장소를 선택 가능 자연적으로 마이크로서비스 아키텍쳐로 다가감
  • 53. Amazon API Gateway + AWS Lambda = 가장 쉽고 빠르게 마이크로서비스 아키텍쳐로 개발하는 방법
  • 56. Serverless Frameworks의 출현 https://www.zappa.io/ https://github.com/awslabs/chalice
  • 57. 마무리 AWS Lambda를 통해서 서버 관리가 필요 없는 클라우드 함수 실행 가능 Amazon API Gateway를 통한 손쉬운 API 관리 가능 AWSLambda + API Gateway + 다른 AWS 관리형 서비스 = Serverless Architecuture 로 진화 가능!
  • 58. 무엇이든 개발해 보세요!! Amazon API Gateway AWS Lambda Amazon DynamoDB
  • 59. @awskrug #AWSKRUG 해시태그로 소셜 미디어에 여러분의 행사 소감을 올려주세요. Question?
  • 60. @awskrug #AWSKRUG 해시태그로 소셜 미디어에 여러분의 행사 소감을 올려주세요. 감사합니다