2024. 1. 12. 11:10ㆍ클라우드/AWS
1월 AWS Design (DevAx) (1/12)
- Serverless on AWS
- Serverless Computing 구축
- API 구성 및 Web Application 배포
- 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 실행 환경 - 고객 뷰
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 |
|
|
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 콘텐츠 전송 네트워크에 쉽게 배포
- 레포지토리 연결
- 빌드 설정 구성
- 앱 배포
AWS Amplify Hosting
최신 웹 애플리케이션 호스팅을 위한 기능
Client-Side Rendered (Single Page Application)
Server-Sice Rendered (SSR)
Static Site
Achitecture
- Frontend
- Backend
'클라우드 > AWS' 카테고리의 다른 글
Serverless Application - Event-driven Serverless Backend 구축 (0) | 2024.01.12 |
---|---|
Serverless Application - API 구성 및 Web Application 배포 (0) | 2024.01.12 |
Serverless Application - Serverless on AWS (0) | 2024.01.12 |
Web Application - Web Application Architecture (0) | 2023.12.22 |
Web Application - Hands-On CloudFront (0) | 2023.12.22 |