AWS Lambda 100% 활용하기
김상필 | 솔루션즈 아키텍트
목차
• 서버리스 아키텍처
• AWS Lambda
• 주요 기능
• 서버리스 아키텍처 설계 패턴
• 모범 사례 및 팁
서버리스 아키텍처
진화하는 아키텍처
모노리틱 아키텍처
(Monolithic)
• 획일적
• 자유가 없는
서비스 중심 아키텍처
(SOA)
• 모듈화
• 기능별 분리
마이크로서비스
(Microservices)
• 최소한의 기능 분리
• 신속한 개발/배포
마이크로서비스 아키텍처를 위한 도구들
웹 서버
코드 라이브러리
웹 서비스/어플리케이션 프레임웍
구성관리 도구
API 관리 플랫폼
배포 패턴
CI/CD 패턴
컨테이너
또 다른 도구, 도구, 도구……
AWS도 함께 합니다
Amazon EC2
오토 스케일링
Elastic Load Balancing
EC2의 자동 복구
AWS Trusted Advisor
AWS Elastic Beanstalk
AWS OpsWorks
Amazon EC2 Container Service
수많은 AWS 서비스들……
…이러한 도구들 및 혁신들의 많은 것들이
여전히 공유되는 의존관계 에 얽혀 있습니다.
하지만…
Servers서버의 물리적인 장애를
어플리케이션에서 어떻게 처리하지?
내 서버들에 대한 접근을
어떻게 통제할 수 있지?
서버의 수를 언제
늘려야 하지?
내 서버의 용량을
언제 늘려야 하지? 내 예산에 맞는
서버의 크기는?
내 서버들의 남아있는 용량은
얼마나 되지?
(AAHHHHHHHHH!!)
서버리스 아키텍처
완전 관리형
• 프로비져닝 없음
• 관리요소 없음
• 높은 가용성
개발자 생산성
• 중요한 코드에 집중
• 빠르게 혁신
• 시장에 빠르게 접근
지속적인 스케일링
• 자동으로
• 스케일 업/다운
… 부하 증감을 예측하기 어려운 게임
서비스에서는 서버없는 마이크로서비스
아키텍처 접근이 더욱 중요 ...
AWS Lambda
AWS Lambda
서버리스, 이벤트 처리 방식의 컴퓨팅 서비스
Lambda = 서버리스 마이크로서비스
AWS Lambda : 서버리스 컴퓨팅
서버 프로비저닝/운영 없이 코드를 실행; 사용한 컴퓨팅 시간 만큼만 지불.
이벤트로 실행:
• 직접 동기/비동기식 호출
• Amazon S3 버킷에 객체 저장
• Amazon API 게이트웨이를 통한 호출
• 그 외 다양한 이벤트…
다음의 작업을 손쉽게 수행:
• 실시간 데이터 처리 수행
• 유연한 백엔드 서비스 구축
Lambda : 동작 원리
1. 업로드 2. 트리거 3. 실행 4. 사용요금
데이터 소스
변경 사항 폴링을 위한
서버 플릿
소스 리스닝 작업 큐 푸시 작업 큐 풀
데이터 처리를 위한
작업자 서버 플릿
부하 대응을
위한
오토스케일
링
S3 객체
Amazon Kinesis 레코드
DynamoDB 테이블
SNS 메시지
IoT 장치
…
고가용성을
위한 다중
가용영역
분산
트래픽
분산을 위한
로드밸런서
서버를 통한 데이터 처리 아키텍처
어플리케이션 코드
데이터 소스
Lambda 함수 연결
이것으로 끝!
Lambda가 수행
리스닝/폴링
작업 큐 관리
오토스케일링
고가용성
로드 밸런싱
서버리스 데이터 처리 아키텍처
어플리케이션 코드
데모
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
데모: 서버리스 비디오 스트리밍 아키텍처
AWS
Lambda
Amazon S3
비디오 파일 입수
PUT 이벤트
Lambda 트리거
Amazon Elastic
Transcoder
트랜스코딩
Job 시작
Amazon S3
여러 bit-rate
HLS 스트리밍
Amazon
CloudFront
시청자
주요 기능
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 이벤트 소스에 대한
자원 정책
Lambda : 동작 원리
제작 기능
• AWS SDK 포함
• 인바운드 네트웍 처리
• 프로세스, 쓰레드, /tmp,
소켓 …
배포 옵션
• 콘솔의 WYSIWIG
편집기를 사용하여 직접
제작/배포
• 코드를 zip 파일로 묶어
Lambda 서비스 혹은
S3로 전송
Stateless 기능
• S3/Amazon
DynamoDB/Amazon
ElastiCache를 사용한 저장
• 인프라스트럭쳐와의
연관성 없음 (로그인 불가)
모니터링 및 로깅
• Amazon CloudWatch
메트릭 – 요청 수, 에러 수,
처리 시간, 처리량
• Amazon CloudWatch
Log를 사용하여 로깅
리소스 사이징
• 23가지 “power levels” 제공
• 높은 레벨일수록 더 많은 메모리와 CPU 파워 제공
• 128 MB, 가장 낮은 CPU 파워
• 1.5 GB, 가장 높은 CPU 파워
• 더 높은 파워 레벨 = CPU를 많이 쓰거나 갑자기 실행되는 작업에 더
빠른 실행 시간
• 가격은 파워 레벨에 따라 변화
• 100ms부터 5분(300초)까지 코드 실행
• 프리티어 : 백만 건 무료 처리, 400,000GB-s/월 무료 처리
예약 Lambda 함수
• 특정 시간에 수행 혹은 반복되는
주기로 수행
• 실행 주기 단위로 설정
• 또는, 표준 cron syntax 사용
• Amazon SQS 혹은 다른 데이터
소스를 폴링
• CLI와 SDK 지원
VPC 접근
• Lambda 함수를 실행할 VPC 선택
• VPC 접근 시 사용할 서브넷 및 보안 그룹 선택
• 사용자의 Lambda 함수가 프라이빗 자원에 접근 가능
• Amazon Elasticache
• Amazon RDS
• 프라이빗 EC2 엔드포인트
• VPC 내 모든 자원
배포 관리: 버저닝 - 개발
Labmda function에 하나 이상의 버전 퍼블리싱
Lambda 함수 배포는 여전히 손쉬움:
• 변경 시 코드 업로드
• 변경 적용
• 마지막 업데이트가 최신
exports.handler =
function(event,context)
{context.succeed(“bye”);}
exports.handler =
function(event,context)
{context.succeed(“hi”);}
배포 관리: 버저닝 - 배포
효과적인 프로덕션 Lambda 함수 코드 관리
개발 중 필요 시 마다 신규 버전 배포:
• 개발 버전을 번호 버전으로 복제 배포
• 배포된 버전은 읽기 전용 (구성 포함)
• 함수 별 간단한, 정수 버전
exports.handler =
function(event,context)
{context.succeed(“bye”);}
exports.handler =
function(event,context)
{context.succeed(“hi”);}
1
2
Versions
배포 관리: 버저닝 - 별칭
서로 다른 버전에 대한 변경 가능한 별칭 사용
특정 버전에 대하여 이름으로 별칭(alias) 지정
• 함수 소유자가 ARNs를 코드에 매핑
• 클라이언트 변경 없이 업데이트 가능
exports.handler =
function(event,context)
{context.succeed(“bye”);}
exports.handler =
function(event,context)
{context.succeed(“hi”);} prod
dev
Aliases
배포 관리: 버저닝 – Lambda 함수 호출
다양한 버전의 Lambda 함수 사용: 개발, 베타, 프로덕션
개발 버전:
FunctionName (or)
FunctionName:$LATEST
특정 버전:
FunctionName:1
FunctionName:2
명명된 버전:
FunctionName:production
FunctionName:v1_2_3_4
서버리스 아키텍처 설계 패턴
서버리스 웹 앱 : 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
비동기 프로세싱: S3 + Lambda
New data
available
Amazon S3 AWS Lambda Amazon S3
데이터베이스 트리거: DynamoDB + Lambda
New data
available
Amazon DynamoDB AWS Lambda
Amazon
DynamoDB
Amazon
Redshift
실시간 분석 처리: 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
서버리스 폴링: SQS + Lambda
AWS Lambda
Scheduled
Job
Amazon SQS
(or rabbitMQ
or webhook)
백엔드 : AWS IoT + AWS Lambda
다양한 Lambda 트리거
AWS
CloudFormation
Custom Resources
Amazon SES
Actions
Amazon Cognito
Sync Triggers
… and the list will
continue to grow!
AWS IoT ActionsAWS Lambda
Scheduled Events
Amazon Echo
Skills
Amazon SWF
Tasks
모범 사례 및 팁
AWS Lambda 모범 사례 및 팁
1. 함수의 크기 제한
• 특히 Java (JVM 시작 시간 소요)
• 함수가 또다른 ‘monolith’가 되지 않도록 주의
• 첫번째 실행은 시간이 걸릴 수 있음 (스케줄 기반 Lambda 활용)
2. Node – 비동기(asynchronous) 실행에 주의
3. 컨테이너 재사용을 가정하지 말 것
• Lambda 컨테이너가 재사용될 수도 있음.
• 그러나 어플리케이션에서 가정하지 말 것 (Stateless 유지)
• 그러나 컨테이너 재사용시에 구성 로딩, 커넥션 유지, 인-메모리 캐시 등 활용
가능
AWS Lambda 모범 사례 및 팁
4. 내장 디스크 (/tmp) 활용 가능
5. 배포를 위하여는 함수에 대하여 명명 규칙/버전/별칭 등 사용
6. 내장된 로깅을 활용
• 서비스 제공 컨텍스트에 대한 디테일 포함
7. 필요 시 커스텀 메트릭 생성
• 운영 또는 비지니스 중심
8. Role 활용하여 권한 관리
9. 구성 정보 등은 외부에 관리 가능
• DynamoDB 활용 가능
지금 바로 해보세요
Go build something!
Amazon API
Gateway
AWS Lambda Amazon
DynamoDB
206년 10월 14일(금) | 강남구 역삼동 GS타워 12층
Zombie Apocalypse Workshop
서버리스 마이크로서비스 구축 워크샵 - 서울(Seoul)
https://aws.amazon.com/ko/events/zombie-reg-seoul-oct-2016/
감사합니다
AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016

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

  • 1.
    AWS Lambda 100%활용하기 김상필 | 솔루션즈 아키텍트
  • 2.
    목차 • 서버리스 아키텍처 •AWS Lambda • 주요 기능 • 서버리스 아키텍처 설계 패턴 • 모범 사례 및 팁
  • 3.
  • 4.
    진화하는 아키텍처 모노리틱 아키텍처 (Monolithic) •획일적 • 자유가 없는 서비스 중심 아키텍처 (SOA) • 모듈화 • 기능별 분리 마이크로서비스 (Microservices) • 최소한의 기능 분리 • 신속한 개발/배포
  • 5.
    마이크로서비스 아키텍처를 위한도구들 웹 서버 코드 라이브러리 웹 서비스/어플리케이션 프레임웍 구성관리 도구 API 관리 플랫폼 배포 패턴 CI/CD 패턴 컨테이너 또 다른 도구, 도구, 도구……
  • 6.
    AWS도 함께 합니다 AmazonEC2 오토 스케일링 Elastic Load Balancing EC2의 자동 복구 AWS Trusted Advisor AWS Elastic Beanstalk AWS OpsWorks Amazon EC2 Container Service 수많은 AWS 서비스들……
  • 7.
    …이러한 도구들 및혁신들의 많은 것들이 여전히 공유되는 의존관계 에 얽혀 있습니다. 하지만…
  • 8.
    Servers서버의 물리적인 장애를 어플리케이션에서어떻게 처리하지? 내 서버들에 대한 접근을 어떻게 통제할 수 있지? 서버의 수를 언제 늘려야 하지? 내 서버의 용량을 언제 늘려야 하지? 내 예산에 맞는 서버의 크기는? 내 서버들의 남아있는 용량은 얼마나 되지? (AAHHHHHHHHH!!)
  • 9.
    서버리스 아키텍처 완전 관리형 •프로비져닝 없음 • 관리요소 없음 • 높은 가용성 개발자 생산성 • 중요한 코드에 집중 • 빠르게 혁신 • 시장에 빠르게 접근 지속적인 스케일링 • 자동으로 • 스케일 업/다운
  • 10.
    … 부하 증감을예측하기 어려운 게임 서비스에서는 서버없는 마이크로서비스 아키텍처 접근이 더욱 중요 ...
  • 11.
  • 12.
    AWS Lambda 서버리스, 이벤트처리 방식의 컴퓨팅 서비스 Lambda = 서버리스 마이크로서비스
  • 13.
    AWS Lambda :서버리스 컴퓨팅 서버 프로비저닝/운영 없이 코드를 실행; 사용한 컴퓨팅 시간 만큼만 지불. 이벤트로 실행: • 직접 동기/비동기식 호출 • Amazon S3 버킷에 객체 저장 • Amazon API 게이트웨이를 통한 호출 • 그 외 다양한 이벤트… 다음의 작업을 손쉽게 수행: • 실시간 데이터 처리 수행 • 유연한 백엔드 서비스 구축
  • 14.
    Lambda : 동작원리 1. 업로드 2. 트리거 3. 실행 4. 사용요금
  • 15.
    데이터 소스 변경 사항폴링을 위한 서버 플릿 소스 리스닝 작업 큐 푸시 작업 큐 풀 데이터 처리를 위한 작업자 서버 플릿 부하 대응을 위한 오토스케일 링 S3 객체 Amazon Kinesis 레코드 DynamoDB 테이블 SNS 메시지 IoT 장치 … 고가용성을 위한 다중 가용영역 분산 트래픽 분산을 위한 로드밸런서 서버를 통한 데이터 처리 아키텍처 어플리케이션 코드
  • 16.
    데이터 소스 Lambda 함수연결 이것으로 끝! Lambda가 수행 리스닝/폴링 작업 큐 관리 오토스케일링 고가용성 로드 밸런싱 서버리스 데이터 처리 아키텍처 어플리케이션 코드
  • 17.
  • 18.
    Amazon S3 BucketEvents 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
  • 19.
    데모: 서버리스 비디오스트리밍 아키텍처 AWS Lambda Amazon S3 비디오 파일 입수 PUT 이벤트 Lambda 트리거 Amazon Elastic Transcoder 트랜스코딩 Job 시작 Amazon S3 여러 bit-rate HLS 스트리밍 Amazon CloudFront 시청자
  • 20.
  • 21.
    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 이벤트 소스에 대한 자원 정책
  • 22.
    Lambda : 동작원리 제작 기능 • AWS SDK 포함 • 인바운드 네트웍 처리 • 프로세스, 쓰레드, /tmp, 소켓 … 배포 옵션 • 콘솔의 WYSIWIG 편집기를 사용하여 직접 제작/배포 • 코드를 zip 파일로 묶어 Lambda 서비스 혹은 S3로 전송 Stateless 기능 • S3/Amazon DynamoDB/Amazon ElastiCache를 사용한 저장 • 인프라스트럭쳐와의 연관성 없음 (로그인 불가) 모니터링 및 로깅 • Amazon CloudWatch 메트릭 – 요청 수, 에러 수, 처리 시간, 처리량 • Amazon CloudWatch Log를 사용하여 로깅
  • 23.
    리소스 사이징 • 23가지“power levels” 제공 • 높은 레벨일수록 더 많은 메모리와 CPU 파워 제공 • 128 MB, 가장 낮은 CPU 파워 • 1.5 GB, 가장 높은 CPU 파워 • 더 높은 파워 레벨 = CPU를 많이 쓰거나 갑자기 실행되는 작업에 더 빠른 실행 시간 • 가격은 파워 레벨에 따라 변화 • 100ms부터 5분(300초)까지 코드 실행 • 프리티어 : 백만 건 무료 처리, 400,000GB-s/월 무료 처리
  • 24.
    예약 Lambda 함수 •특정 시간에 수행 혹은 반복되는 주기로 수행 • 실행 주기 단위로 설정 • 또는, 표준 cron syntax 사용 • Amazon SQS 혹은 다른 데이터 소스를 폴링 • CLI와 SDK 지원
  • 25.
    VPC 접근 • Lambda함수를 실행할 VPC 선택 • VPC 접근 시 사용할 서브넷 및 보안 그룹 선택 • 사용자의 Lambda 함수가 프라이빗 자원에 접근 가능 • Amazon Elasticache • Amazon RDS • 프라이빗 EC2 엔드포인트 • VPC 내 모든 자원
  • 26.
    배포 관리: 버저닝- 개발 Labmda function에 하나 이상의 버전 퍼블리싱 Lambda 함수 배포는 여전히 손쉬움: • 변경 시 코드 업로드 • 변경 적용 • 마지막 업데이트가 최신 exports.handler = function(event,context) {context.succeed(“bye”);} exports.handler = function(event,context) {context.succeed(“hi”);}
  • 27.
    배포 관리: 버저닝- 배포 효과적인 프로덕션 Lambda 함수 코드 관리 개발 중 필요 시 마다 신규 버전 배포: • 개발 버전을 번호 버전으로 복제 배포 • 배포된 버전은 읽기 전용 (구성 포함) • 함수 별 간단한, 정수 버전 exports.handler = function(event,context) {context.succeed(“bye”);} exports.handler = function(event,context) {context.succeed(“hi”);} 1 2 Versions
  • 28.
    배포 관리: 버저닝- 별칭 서로 다른 버전에 대한 변경 가능한 별칭 사용 특정 버전에 대하여 이름으로 별칭(alias) 지정 • 함수 소유자가 ARNs를 코드에 매핑 • 클라이언트 변경 없이 업데이트 가능 exports.handler = function(event,context) {context.succeed(“bye”);} exports.handler = function(event,context) {context.succeed(“hi”);} prod dev Aliases
  • 29.
    배포 관리: 버저닝– Lambda 함수 호출 다양한 버전의 Lambda 함수 사용: 개발, 베타, 프로덕션 개발 버전: FunctionName (or) FunctionName:$LATEST 특정 버전: FunctionName:1 FunctionName:2 명명된 버전: FunctionName:production FunctionName:v1_2_3_4
  • 30.
  • 31.
    서버리스 웹 앱: 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
  • 32.
    비동기 프로세싱: S3+ Lambda New data available Amazon S3 AWS Lambda Amazon S3
  • 33.
    데이터베이스 트리거: DynamoDB+ Lambda New data available Amazon DynamoDB AWS Lambda Amazon DynamoDB Amazon Redshift
  • 34.
    실시간 분석 처리: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
  • 35.
    서버리스 폴링: SQS+ Lambda AWS Lambda Scheduled Job Amazon SQS (or rabbitMQ or webhook)
  • 36.
    백엔드 : AWSIoT + AWS Lambda
  • 37.
    다양한 Lambda 트리거 AWS CloudFormation CustomResources Amazon SES Actions Amazon Cognito Sync Triggers … and the list will continue to grow! AWS IoT ActionsAWS Lambda Scheduled Events Amazon Echo Skills Amazon SWF Tasks
  • 38.
  • 39.
    AWS Lambda 모범사례 및 팁 1. 함수의 크기 제한 • 특히 Java (JVM 시작 시간 소요) • 함수가 또다른 ‘monolith’가 되지 않도록 주의 • 첫번째 실행은 시간이 걸릴 수 있음 (스케줄 기반 Lambda 활용) 2. Node – 비동기(asynchronous) 실행에 주의 3. 컨테이너 재사용을 가정하지 말 것 • Lambda 컨테이너가 재사용될 수도 있음. • 그러나 어플리케이션에서 가정하지 말 것 (Stateless 유지) • 그러나 컨테이너 재사용시에 구성 로딩, 커넥션 유지, 인-메모리 캐시 등 활용 가능
  • 40.
    AWS Lambda 모범사례 및 팁 4. 내장 디스크 (/tmp) 활용 가능 5. 배포를 위하여는 함수에 대하여 명명 규칙/버전/별칭 등 사용 6. 내장된 로깅을 활용 • 서비스 제공 컨텍스트에 대한 디테일 포함 7. 필요 시 커스텀 메트릭 생성 • 운영 또는 비지니스 중심 8. Role 활용하여 권한 관리 9. 구성 정보 등은 외부에 관리 가능 • DynamoDB 활용 가능
  • 41.
  • 42.
    Go build something! AmazonAPI Gateway AWS Lambda Amazon DynamoDB
  • 43.
    206년 10월 14일(금)| 강남구 역삼동 GS타워 12층 Zombie Apocalypse Workshop 서버리스 마이크로서비스 구축 워크샵 - 서울(Seoul) https://aws.amazon.com/ko/events/zombie-reg-seoul-oct-2016/
  • 44.