혼자 보는 이것 저것 스크랩 짬뽕
AWS 유튜브, AWS Skill Builder 강의, 강의
Application Load Balancer | Amazon API Gateway |
---|---|
Application Load Balancer를 이미 사용하고 있는 경우 기존 컴퓨팅 스택을 쉽게 전환할 수 있음 | REST API를 빌드하고 다른 서비스 및 Lambda 함수와 통합하는 데 적합 |
Amazon Cognito 사용자 풀을 포함하여 OID 지원 공급자를 통한 권한 부여 지원 | AWS Identity and Access Management(IAM), Amazon Cognito 및 Lambda 권한 부여자를 통한 권한 부여 지원 |
처리된 요청을 기준으로 요금 부과 | 로드 밸런서 용량 단위를 기준으로 시간당 요금 청구 |
안정적인 트래픽 스트림에 대해 경제적일 수 있음 | 급변하는 패턴에 더 경제적일 수 있음 |
API 관리를 위한 추가 기능: | |
- 클라이언트용 SDK 내보내기 | |
- 제한 및 사용 계획을 사용하여 액세스 제어 | |
- 여러 API 버전 유지 관리 | |
- 카나리 배포 |
워크로드를 실행하는 인프라 비용(예: 프로비저닝된 EC2 용량에 대한 비용과 Lambda 함수의 호출당 비용)
애플리케이션이 실행될 리소스를 계획, 설계 및 프로비저닝하기 위한 개발 노력
애플리케이션이 프로덕션 상태가 되었을 때 팀이 애플리케이션을 유지 관리하는 데 소요되는 시간 비용
AWS Lambda - 서버를 프로비저닝하거나 관리하지 않아도 코드를 실행할 수 있도록 해주는 컴퓨팅 서비스
구분 | 내용 |
---|---|
서비스명 | AWS Lambda |
설명 | - 서버에 대한 걱정 없이 코드 실행 |
- 사용한 컴퓨팅 시간에 대해서만 비용 지불 | |
주요 특징 | - 기존코드 활용 가능(Node.js, Java, Python, Go, C#) |
- 단순한 자원 모델을 가지며, 실행되는 메모리에 따라 CPU, N/W 자원 할당 | |
- 여러 AWS 서비스들과 통합되어 있으며, Event, Request 기반으로 실행 가능 | |
- 자체 Editor, Zip 배포, Cloud9을 통해 개발 및 배포 가능 | |
- Cloudwatch, X-ray를 통해 요청 수, 에러 수, 처리 시간, 처리량 모니터링 가능 | |
- AWS IAM Role을 사용한 권한 관리 AWS 이벤트 소스의 자원 정책 적용 | |
프리티어 | - 월 1백만 건 무료 요청과 월 400,000초 컴퓨팅 시간(메모리에 따라변경됨) |
- 프리티어는 12개월 이후에도 종료되지 않으며, AWAS 고객에게 무기한 제공 |
기존 IDC 내부에서 사용하던 서버를 클라우드로 옮기는 일들은 더이상 낯설지 않습니다. 또한 최근에는 웹 서비스에 대한 구축이나 데이터 가공 수집을 위한 플랫폼 구축 시 가장 많이 논의되는 것이 바로 서버리스(Serverless) 아키텍처입니다.
이전에는 기업용 홈페이지나 웹 서비스를 구현하기 위해 회사 내부에 HP, IBM 서버를 구입하여 H/W 기반의 웹 서버와 DB 서버를 직접 설치하고 운영하였습니다. 이후 VMware 나 Hyper-V 기반의 가상화 서버로 P2V를 수행하여 H/W 서버의 수량을 줄이고 손쉽게 서버를 관리할 수 있었으며, 클라우드가 대중화되면서, 가상화 서버를 클라우드로 전환하는 사례가 다양하게 진행되고 있습니다. 또한 최근에는 MSA(Microservice Architecture) 기반의 컨테이너 서비스를 도입하는 기업이 점점 들어나고 있습니다.
1. IDC 내부 H/W 서버 ( 물리적 서버 )
2. IDC 내부 가상화 서버 ( Virtual Servers )
3. 클라우드 가상화 서버 ( Cloud Virtual Servers )
4. 클라우드 컨테이너 ( Cloud Containers )
5. 클라우드 서버리스 ( Cloud Serverless )
서버리스(serverless)라는 말 자체가 서버가 필요없다는 뜻은 아니며, 서비스는 클라우드 기반의 서버에서 구동 되지만 고객 스스토 관리해야할 서버 혹은 컨테이너 서비스가 없기 때문에 고객 입장에서는 서버를 사용하는 것이 아니라 서비스를 이용하는 의미로 이해할 수 있다.
코드 관리도 중요하지만 접근권한에 대한 관리를 해야한다.
구분 | 내용 |
---|---|
완전 관리형 서비스 | - 가용성이 뛰어나며, 내결함성을 갖춘 인프라에서 코드 실행 |
- OS의 패치나, 사용량 증가에 따른 서버 증설 및 관리 불필요 | |
- 코드를 원할하게 배포하고, 내장된 로깅 및 모니터링 기능 제공 | |
기존 보유 코드 재활용 | - 새로운 언어 및 도구, 프레임워크를 배울 필요 없음 |
- 기존 라이브러리 및 타사 도구 활용 가능 | |
- 모든 코드나 라이브러리를 Layer로 만들어 손쉽게 공유 활용 가능 | |
통합된 보안 모델 | - 내장 SDK, IAM과 통합하여 코드가 안전하게 다른 서비스의 엑세스 제공 |
- 기본적으로 VPC 내부에서 코드가 실행되며, 리소스의 엑세스 제어 가능 | |
사용량 기반 지불 | - 코드 실행에 필요한 컴퓨팅 시간 및 자원된 요청에 대해서만 비용 지불 |
- 100밀리초 단위로 청구 금액이 정산되기 때문에 비용 효율적인 서비스 | |
높은 내결함성 | - 각 리전의 여러 가용 영역의 컴퓨팅 파워를 활용하여 높은 내결합성 |
- 데이터 센터나 시설에 장애가 발생되어도 코드에 대한 보호 가능 | |
- 유지 관리 시간이나 예약된 가동 중단 시간 없음 | |
자동 규모 조정 | - 사용량 변화에 따라 고객이 관리할 필요 없으며, 자동으로 확장 |
- 하루 몇 개의 요청부터 1초당 수천 개의 요청까지 자동으로 쉽게 확장 | |
- 이벤트 발생 빈도의 증가에 상관 없이 일관 되게 높은 성능 유지 |
구분 | 서비스 모델 | 구현 사례 |
---|---|---|
Synchronous(Push) | Amazon API Gateway와 연동으로 웹 애플리케이션을 통한 Request 수신 및 처리 결과에 대한 Feedback 제공(양방향) | 웹 애플리케이션, 모바일, 백앤드, IoT 백앤드 |
Asynchronous(Event) | Amazon SNS, Amazon S3 등의 이벤트 수신을 통해 트리거되어, 요청에 대한 처리 후 결과를 별도 저장 및 다른 서비스로 전송 처리 | 파일 또는 이미지 변환, 실시간 요청사항 처리, 타서비스 연동 및 전달 |
Stream-Base | Amazon DynamoDB, Amazon Kinesis로부터 상태 변경에 따른 트리거나 스트림베이스트의 요청에 따른 사항 처리 및 타 서비스 연동 | 실시간 스트림 처리, 데이터 축출 및 변환 서비스 |
Introduction to AWS Lambda & Serverless Applications - AWS 유튜브 참고 자료
Match resource allocation ( up to 3 GB! ) to logic Stats for Lambda function that calculates 1000 times all prime numbers <= 1000000
API provided by the Lambda service
Used by all other services that
invoke Lambda across all models
Supports sync and async
Can pass any event payload
structure you want
Client included in every SDK
Fine grained security controls for both execution and invocation:
Execution plicies:
Function policies:
Resource policies allow for croess account access
Cold Start vs Warm Start
코드 패키지 사이즈를 최소화
Lambda Handler와 Core Logic을 분히
Execution Context 재사용을 활용
Environment Variable을 적극 활용
자바의 경우 .jar 파일들을 별도의 /lib 디렉토리에 배치
Max Memory Used 사이즈는 Lambda Function 실행에 충분할 정도로만
사용되지 않는 Lambda Function들을 삭제
API 스트로틀링에 대비
반드시 필요한 경우에만 Lambda Function 을 VPC에 배치
CloudWatch Custom Metrics를 통해 Lambda Function에서 필요한 지표들을 기록
X-Ray를 이용해 Lambda Function을 Trace
VM | Container | |
---|---|---|
자원분리 | 자원공유 | |
다른 OS 가능 | 동일 OS | |
스케일 OUT 시 | 구동 시간⬆ | 구동시간⬇(VM 대비) |
⬇
VM ➡ Container ➡ MSA (k8s 기반으로) ➡ serverless (컨테이너 대신 만들어 줄게)
서버 환경 동일화 등의 문제가 있으니 ➡ 서버리스
이벤트 (트리거로) -> lambda 실행 (함수 배포, 단일 기능의 함수)
250MB⬆ -> 컨테이너화 해야된다.
휘발성 작업 환경
Cold start : 전역 변수 실행까지 (많을 수록 오래걸림), 정적 초기화 (맨위에 전역 변수)
Warm Start : 이미 준비된 Workers 호출
스로틀링 : 과열된 기기으 ㅣ손상 방지를 우해 강제로 클릭/전압⬇ 또는 Shutdown
람다 : 계정별 리밋이 정해져있다. 리전별 1000개 ( 모든 함수가 공유 )
API 게이트 웨어 : Timeout 30초
함수는 짧게, 동시성 ↑, 프로비저닝 동시성 (하앙 준비?)
RDS Proxy : DB connect pool 역할, Aurora는 지원 x (자기가 알아서 관리하기 때문)
종속성 최적화, 정역 자원 리연 로딩( 인스턴스 할당 늦게, 사용시점에 할당 하자)
프로세스간의 통신 (Socket, queue)
SQS(Simple Queue Service), Message Queue(MQ)
SNS(Simple Notification Service), kafka Topic 역할
AWS Skill Builder - serverless lambda
클라이언트 폴링 패턴
장점
- 동기식 흐름 교체 용이
단점
- 클라이언트로 전송되는 데이터의 일관성 지연 추가 발생
- 불필요한 작업 증가 및 변경된 사항이 없는 경우의 요청/응답에 따른 비용 증가
Amazon Simple Notification Service(Amazon SNS)를 사용한 Webhook
API Gateway를 사용한 WebSocket 패턴