
What’s serverless?
- 서버를 관리할 필요가 없다
- 서버를 프로비저닝 하지 않는 것을 의미함
- 코드를 배치하는 것 = 함수를 배치
- AWS Lambda
- 원격 관리되는 것을 모두 포함 (DB, 메시징, 스토리지 등 서버를 프로비저닝 하지 않는 모든 것을 포함)
Serverless in AWS
- AWS Lambda
- DynamoDB
- AWS Cognito
- AWS API Gateway
- Amazon S3
- AWS SNS & SQS
- AWS Kinesis Data Firehose
- Aurora Serverless
- Step Functions
- Fargate
AWS Lambda
- Lambda는 가상의 함수
- 관리할 서버 없이 코드를 프로비저닝하면 함수가 실행
- 온디맨드로 실행된다 즉, Lambda를 사용하지 않으면 람다 함수가 실행되지 않는다
- 스케일링이 자동화된다
Benefits of AWS Lambda
- Easy Pricing
- 여러가지 프로그래밍 언어 사용 가능
- CloudWatch와의 모니터링 통합도 쉽다
- 함수당 최대 10GB의 램을 프로비저닝 할 수 있다
- 함수의 RAM을 증가시키면 CPU및 네트워크의 품질과 성능도 함께 향상된다
- 컨테이너가 Lambda 런타임 API를 구현해야 한다
- 만약 컨테이너가 Lambda 런타임 API를 구현하지 않는다면 ECS나 Fargate에서 컨테이너를 실행해야 한다
AWS Lambda Language Support
- 커뮤니티가 지원하는 사용자 지정 런타임 API가 있어 다양한 언어를 지원
AWS Lambda Integrations Main ones
- API Gateway : REST API를 생성
- Kinesis : Lambda를 이용해 바로 데이터를 변환
- DynamoDB : 트리거를 생성할 때 사용
- CloudFront : Lambda@Edge
- CloudWatch 이벤트, EventBridge : AWS의 인프라에 어떤 일이 생기고 그 상황에 대응하고자 할 때 사용
- CloudWatch Logs : 어디든 해당 로그를 스트리밍
- Cognito : 사용자가 데이터베이스에 로그인할 때마다 응답
Serverless CRON Job
- CRON : EC2 인스턴스에서 작업을 생성하는 방법인데 이는 가상 서버(EC2 인스턴스 등)에서 실행해야 한다
- CloudWatch 이벤트 규칙 또는 EventBridge 규칙을 만들고 1시간마다 작동되게 설정해서 1시간마다 람다 함수와 통합되면 태스크를 수행하는 형식 등으로 사용
AWS Lambda Limits to Know - per region
- 한도는 리전 당 존재
- 실행 한도
- 실행 시 메모리 할당량은 128MB 에서 10GB이며 메모리는 1MB씩 증가
- 배포 한도
- 압축 시 최대 크기는 50MB, 압축하지 않았을 경우 250MB
- 위의 용량을 넘어가면 /tmp 공간을 사용해야 하므로 시작할 때 크기가 큰 파일이 있으면 /tmp 디렉터리를 이용
Customization At The Edge
- CloudFront를 사용할 때는 엣지 로케이션을 통해 콘텐츠를 배포
- Edge Function
- CloudFront의 두 종류 함수
- CloudFront 함수
- Lambda@Edge
- Edge Function을 사용하면 전역으로 배포되기 때문에 서버를 관리할 필요가 없다
CloudFront Functions & Lambda@Edge Use Cases
- 웹사이트 보안과 프라이버시
- 엣지에서의 동적 웹 애플리케이션
- 검색 엔진 최적화
- 오리진 및 데이터 센터 간 지능형 경로
CloudFront Functions
- 고성능, 고확장성이 필요할 때 뷰어 요청과 뷰어 응답에만 사용
- 초당 수백만 개의 요청을 처리
- Runtime Support : JavaScript
Lambda@Edge
- 기능이 더 많다
- 초당 수천 개의 요청을 처리할 수 있다
- 모든 CloudFront 요청 및 응답을 변경할 수 있다
- Runtime Support : Node.js, Python
Lambda by default
- 사용자의 VPC 외부에서 시작
- 따라서 사용자는 VPC 내에서 리소스에 액세스할 권한이 없다
Lambda in VPC
- VPC ID Lambda 함수를 시작하려는 서브넷을 지정하고 함수에 보안 그룹을 추가해야 한다
Lambda with RDS proxy
- RDS 데이터베이스가 프라이빗 서브넷에 있어도 Lambda 함수로 직접 해당 DB에 액세스할 수 있다
- RDS proxy를 사용하면 연결을 한 곳으로 모으고 RDS 데이터베이스 인스턴스 연결의 수를 줄일 수 있다
- 데이터베이스 연결의 풀링과 공유를 통해 확장성을 향상
- 장애 조치의 이점
- 보안을 높일 수 있다
Amazon DynamoDB
- 데이터가 다중 AZ간에 복제되므로 가용성이 높다
- 클라우드 네이티브
- NoSQL 데이터베이스
- 관계형 데이터베이스는 아니지만 트랜잭션 지원 기능이 있다
- 방대한 워크로드로 확장이 가능
- 초당 수백만 개의 요청을 처리하고 수조 개의 행, 수백 TB의 스토리지를 가지게 된다
- 성능이 높고 일관성 또한 높다
- 보안과 관련된 모든 기능은 IAM과 통합되어 있다
- 오토 스케일링 기능이 탑재
- 데이터베이스를 프로비저닝할 필요가 없다
- 항상 사용할 수 있으므로 테이블을 생성해 해당 테이블의 용량만 설정하면 된다
- 테이블 클래스는 두 종류
- Standard : 액세스가 빈번한 데이터
- IA : 액세스가 빈번하지 않는 데이터
DynamoDB - Basics
- 데이터베이스가 이미 존재하는 서비스이므로 테이블만 생성하면 된다
- 각 테이블에 키가 부여되는데 기본 키는 생성 시 결정
- 속성은 나중에 추가할 수도 있고 null이 될 수도 있다
- DynamoDB 항목의 최대 크기는 400KB이므로 큰 객체를 저장할 때는 적합하지 않다
- 데이터의 유형과 구성 면에서 스키마를 빠르게 전개해야 할 때 DynamoDB가 유리
- provision mode : 미리 읽기와 쓰기 용량을 할당해서 비용을 관리하고 최적화
- on-demand mode : 애플리케이션이 수행하는 실제 읽기와 쓰기에만 과금
DynamoDB Accelerator (DAX)
- 고가용성의 완전 관리형 인메모리 캐시
- 캐시 데이터에 마이크로초 수준의 지연 시간을 제공
- 캐시의 기본 TTL은 5분으로 설정되어 있으나 변경이 가능하다
- ElastiCache는 집계 결과를 저장할 때 유용
- DynamoDB는 대용량의 연산을 저장할 때 유용
DynamoDB - Stream Processing
- 스트림 처리도 가능하다
- 테이블의 모든 수정 사항 (생성, 업데이트, 삭제)를 포함한 스트림을 생성 할 수 있다
- 두 가지 스트림 처리
- DynamoDB Streams
- 보존 기간이 24시간이며 소비자 수가 제한
- Lambda 트리거와 함께 사용하면 좋다
- Kinesis Data Streams
- 보존 기간이 1년
- 더 많은 수의 소비자 수를 가진다
- 데이터를 처리하는 방법이 많다
AWS API Gateway
- API Gateway와 Lambda가 통합하면 완전 서버리스 애플리케이션이 구축되므로 인프라 관리가 필요 하지 않다
- WebSocket 프로토콜을 지원하므로 API Gateway로 두 가지 방법의 실시간 스트리밍이 가능하다
- API Versioning을 핸들링하므로 클라이언트 연결이 끊기지 않는다
- 인증, 권한 부여 등 수많은 보안 기능을 API Gateway에 활성화할 수 있다
AWS Step Functions
- 서버리스 워크플로를 시각적으로 구성할 수 있는 기능
- 주로 람다 함수를 오케스트레이션 하는 데 활용