Serverless Application - Serverless Computing 구축

2024. 1. 12. 11:10클라우드/AWS

1월 AWS Design (DevAx) (1/12)

  1. Serverless on AWS
  2. Serverless Computing 구축
  3. API 구성 및 Web Application 배포
  4. Event-driven Serverless Backend 구축

 


 

 

Serverless Computing 구축

AWS Lambda 기능 소개, Serverless 개발 환경 구성 및 backend 구축 실습

컴퓨팅 패러다임의 변화

  • Serverless
  • 지속적인 스케일링
  • 빌트인 된 내결함성
  • 사용한 만큼 과금
  • 유지보수 없음
  • 비지니스 가치에 집중

 

 

AWS 컴퓨팅 서비스

  스케일 단위 추상화 수준 선택 기준
AWS Lambda Function Runtime 필요할 시점에 코드 실행
AWS Fargate Task OS 컨테이너
애플리케이션 실행
Amazon ECS/EKS Task OS 서버 구동,
스케일링 관리,
애플리케이션 설정
Amazon EC2 VM H/W 서버, 스토리지,
네트워크, OS 설정

 

 

컴퓨팅 운영 모델

     
AWS Lambda    
AWS Fargate    
Amazon ECS/EKS    
Amazon EC2    

 

 

서버리스 컴퓨팅 옵션

AWS Lambda AWS Fargate
   

 

 

전통적인 3-Tire 애플리케이션 아키텍처

 
 
 

 

 

Modern 3-Tire 애플리케이션 아키텍처

 

 

작은 조각들, 느슨한 연결 (loosely joined)

 

 

Lambda

서버리스 시작?

November 13, 2014 Apil 9, 2015
   

 

 

AWS Pioneered Serverless

 

 

서버리스 컴퓨팅 적용 증가

Hundreds of Thousands of customers

Trillions of Lambda executions per month

 

 

서버리스 아키텍처 : high-level view

Lambda 서비스 단위 - "Function"

Event AWS Lambda AWS Services Databases Etc.
데이터 상태 변화
엔드 포인트 요청
리소스 상태 변화
  • Lambda function
  • Python (3.11 ~ 3.7)
  • Node.js(20/18/16/14)
  • Java (21/17/11/8)
  • Golnag 
  • C# 
  • Ruby 
  • Runtime API 
  • Container images 
 

 

 

Lambda 실행 환경 - 고객 뷰

 

 

Lambda 실행 환경 - Under the Hood

Workers: 인스턴스라고 생각하면 됨

microVM 안에 실행 환경 구성

 

Execution Environment (EE)

  • 코드가 실제로 구동 되는 곳
  • 한 개의 EE에서 한 번에 하나의 요청을 처리

 

Concurrency (동시성)

  • 트래픽을 처리하는 EE 개수 (Function/Version/Alias)

Cuncurrency ≈ RPS × Duration

Cuncurrency number of EEs

 

 

Lambda 기반 기술 - re:Invent 2023

 

 

Lambda on Firecracker

 

 

...

 

 

Lambda - Handling Request (Managed Runtime)

 

 

Lambda - Handling Request (Container Image)

 

 

Lambda 함수 패키징

Zip file archives Container images
Function Code (/var/task)
Funciton Layer (/opt)
Operatin systen (AL or AL2)
Function Container Image
  • 50MB zipped
  • 250MB unzipped
  • 10GB

 

 

 

Lambda Storage

Memory
(128MB ~ 10GB)

/tmp space
(512MB)

Deployment Package
(< 250MB)
  Amazon S3
내부 저장소   외부 저장소 옵션

 

 

Lambda 임시 저장소 (Ephemeral Storage)

  • 임시 저장소 (/tmp)
    • 실행 환경 (Execution environment)에서 제공되는 파일 시스템
  • 저장소 크기 : 512MB ~ 10GB
    •  
  • 저장소 비용
    •  

 

 

Lambda Runtime API

 

 

Lambda Runtime 수명 주기

Init Invoke ShutDown
Extension
Init
Runtime
Init
Function
Init
Lambda
handler
실행
Lambda
handler
실행
Runtime
ShutDown
Extension
ShutDown

 

Cold Start

Lambda API로 요청 발생 Warm 실행 환경 확인 -(No) 가용한 컴퓨팅 리소스 확인 커스텀 코드 다운로드 실행 환경 구동 (execute environment) 초기화 (init) 실행 handler 호출 함수 호출 (invocation) 완료

 

Warn Start

Lambda API로 요청 발생 → Warm 실행 환경 확인 -(Yes) handler 호출 → 함수 호출 (invocation) 완료

 

 

Lambda 이벤트 소스

데이터 저장소 엔드포인트 구성 저장소 이벤트/메시지 서비스
Amazon S3
Amazon DynamoDB
Amazon Kinesis
Amazon Dognito
Amazon API Gateway
AWS IoT
AWS Step Functions
Amazon Alexa
AWS CloudFormation
AWS CloudTail

 

 

 

Lambda 이벤트 소스

동기식 비동기식 이벤트 소스 매핑
호출자가 함수의 응답을
기대 (expect)
호출자가 함수의 응답을
기대 하지 않음
(don't expect)
특정 이벤트 소스와 통합

 

 

Lambda 실행 모델

 

 

Lambda 동기식 호출

 

 

Lambda 비동기식 / Event 호출

 

 

Lambda Event Source Mapping

 

 

Lambda 동시성 (Concurrency)

 

 

Lambda 동시성 제어 - Reserved Concurrency

  • 지정된 Lambda 함수의 최대 동시성 값 설정
  • 계정당 할당량

 

 

Lambda 동시성 제어 - Provisioned Concurrency

  • 시작 시간 감소 : 100ms 이하
  • 함수 Versions이나 Alias 필요
    •  
  • 초기 Burst 이후 분당 500개 씩 확장
    •  
  • 함수 코드 변경 없이 동시성 사용
    •  

 

 

Provisioned Concurrency vs On-demand

  Provisioned Concurrency On-demand
Cold Start No Yes
함수 호출 대기 Hyper-ready (수십 msec) 항상 준비되어 있지는 않음
함수 시작 시간 예측 가능 예측 가능하지 않음
실행 환경 (EE) 셋업 Provisioning 절차에서 수행 함수 실행 절차에서 수행
애플리케이션 Auto Scaling Yes No
Cost 코드 실행 기간, 함수 요청 수, 동시성 프로비저닝 코드 실행 시간, ...

 

 

Lambda 스케일링 할당량 (Quotas)

   
   

 

 

Lambda Perfomance

처리 속도
(Latency)
처리량
(Throughput)
비용
(Cost)

 

 

Lambda 비용 산정

  • 함수 요청 수 (Number of requests)
    • 요청 1백만 건 당 $0.2
  • 코드 실행 기간 (Duration)
    • 코드 시작부터 종료까지의 시간
    • 이전 100ms에서 1ms 단위로 세분화 측정 (기존 대비 70% 까지 감소 효과)
    • 함수에 할당한 메모리 크기에 따라 과금
    • 기반 아키텍쳐 구분 과금 : x86 / ARM

100ms with 2GB of RAM 비용 = 200ms with 1GB of RAM 비용

 

 

AWS Graviton2 기반의 Lambda 함수

x-86 기반 Lambda 대비 최대 34% 더 나은 가격 대비 성능

향상된 성능
x86 대비
20% 낮은 가격

 

 

 

Lambda 비용 - x86 vs Graviton2

Memory/Power: 2,048

...

 

 

Lambda 파워 튜닝

  • 데이터 기반의 비용 성느 오치적화 도구
  • 비용과 속도의 균형을 맞추기 위해 조정
  • AWS Step Function으로 리소스 생성과 시험
  • Pre-/post-flight scripts 구동,
    서로 다른 페이로드 전달,
    의도하는 결과에 대한 전략 구성

 

 

Serverless Application Hands-On

...

 

 

AWS Cloud9

  • 모든 기능을 갖춘 클라우드 기반 IDE
  • 서버리스 개발을 위한 통합 도구
  • 40+ 프로그래밍 언어와 프레임워크 지원
    • Python, PHP, Ruby, Go, C++
    • React, Javascript Flutter, Swift, Android, React Native, Angular, Next.js, Vue
  • 내장 터미널 및 임시 공간

 

 

AWS Amplify

프론트엔드 및 풀스택 개발자가 확장 가능한 웹 및 모바일 앱을 더 빠르게 빌드할 수 있도록 지원하는 도구 및 서비스 세트

 

 

AWS Amplify

AWS에서 제공하는 웹 및 모바일 앱 개발에 중점을 둔 서비스 제품군

 

Amplify Studio/CLI

use-case centric developer tooling

 

Amplify hosting

Libraries and UI for Web

 

Mobile Apps

Libraries and UI for iOS, Android, Flutter, React Native

 

Mobile-focused building block services

Auth (Cognito)

Storage (S3)

Notifications (Pinpoint)

AI/ML Services

...

 

 

AWS Amplify - Web App hosting

빠르고 안전하며 안정적인 AWS 콘텐츠 전송 네트워크에 쉽게 배포

  1. 레포지토리 연결
  2. 빌드 설정 구성
  3. 앱 배포

 

 

AWS Amplify Hosting

최신 웹 애플리케이션 호스팅을 위한 기능

Client-Side Rendered (Single Page Application)

  •  

Server-Sice Rendered (SSR)

  •  

Static Site 

  •  

 

 

Achitecture

  • Frontend
  • Backend