AWS : Serverless 개요, AWS Lambda
서버리스란?
- 서버를 더이상 관리할 필요가 없다
- 단지 코드=함수를 배치하기만 하면 된다.
- Serverless == FaaS(Function as a Service)
- 원래는 AWS Lambda로 시작된 개념이지만, 현재는 원격 관리 등도 포함된다.
- 서버가 없다는 뜻이 아니다.
- 서버를 관리하거나, 프로비저닝하거나, 보지 않는다는 의미이다.
- AWS Lambda, DynamoDB, AWS Cognito, AWS API Gateway, Amazon S3, AWS SNS & SQS, AWS Kinesis Data Firehose, Aurora Serverless, Step Functions, Fargate 등
AWS Lambda
장점
- 비용 측정이 쉽다 - request, compute time 당 비용이 계산된다
- 다른 프로그래밍 언어들과 쉽게 통합된다.
- Node.js(JavaScript), Python, Java, C#, Go, Ruby, custom Runtime API
- AWS CloudWatch를 통해 모니터링 할 수 있다.
- 함수당 최대 10GB의 메모리까지 리소스를 늘릴 수 있다.
- RAM이 증가하면 CPU와 네트워크도 같이 증가된다.
Amazon EC2 | Amazon Lambda |
Virtual Server in the Cloud | Virtual Functions - 서버를 관리하지 않아도 된다 |
RAM과 CPU를 프로비저닝 해야 한다. | 제한시간이 있다. - 실행 시간이 짧다 |
계속 실행된다. | 사용할 때만 실행된다. |
오토 스케일링으로 서버를 추가/삭제할 수 있다 | 스케일링이 자동이다 - AWS가 자동으로 프로비저닝 해 준다. |
* Lambda Container Image
- 컨테이너 이미지는 반드시 Lambda Runtime API를 구현해야 한다.
- 만약 그렇지 않다면 ECS, Fargate에서 실행해야 한다.
ex. 썸네일 만들기
새로운 이미지를 썸네일로 하고 싶다면, S3에서 썸네일을 만들고 DynamoDB에 그 이미지에 대한 정보를 저장하도록 하는 람다 함수를 만든다.
AWS Lambda의 가격 책정
- Pay per calls
- 처음 100만개의 request는 무료
- 그 이후 100만 리퀘스트에 한번 0.2$
람다 함수 만들기
Lambda 검색해서 들어간다.
[Create function] 클릭
hello-world-python 검색해서 선택 후 [Configure] 클릭
함수 이름 정하고 [Create]를 클릭한다.
좌측 하단에서 lambda.function.py를 클릭한 뒤, [Test]를 클릭한다.
그리고 [Test]를 눌러보면 실행된다.
Duration - 실행 시간
Billed Duration - 과금된 실행 시간
Memory Size - 프로비저닝 된 메모리 사이즈 등
람다 함수 구성하기
Configurations 탭 - [Edit]
메모리와 시간 제한 등을 설정할 수 있다.
Monitor 탭에서 람다 함수를 모니터링 할 수 있다.
[Logs]로 들어가서 우측의 [View logs in CloudWatch]를 클릭한다.
람다 함수의 로그를 확인할 수 있다.
Configuration 탭에서 Permissions를 보면, Execution role에 역할이 있다.
이는 람다 콘솔에서 생성한 역할이다.
Policy name을 클릭
Policy summary를 클릭해 보면, CloudWatch Logs에 쓰기 할 수 있다는 것을 알 수 있다.
Lambda의 제한 - 리전 당
- 실행 제한
- 최대 실행 시간 15분, 이 이상은 적합하지 x
- 메모리 할당이 128MB ~ 10GB, 1MB씩 증가한다.
- 환경 변수 4KB
- 임시 공간 512MB - 람다를 생성하는 동안 큰 파일을 끌어와야 할 때
- 동시 실행 - 1000개까지, 더 늘어날 수도 있다.
- 배치 제한
- 람다 함수의 배치 사이즈 - 압축했을 때 50MB, 압축 안했을 때 250MB
- 시작할 때 더 큰 파일을 배치해야 하면 /tmp 이용한다.
- 환경 변수 4KB
Lambda@Edge
- 람다의 또 다른 동기식 호출 유형
- 만약 CloudFront를 이용해서 CDN을 배치했을 때, 엣지 로케이션마다 글로벌 람다 함수를 실행하고 싶다면?
- 리퀘스트 필터링을 애플리케이션 도착 전에 구현할려면?
- 응답성 좋은 애플리케이션을 만들 수 있다.
- CloudFront CDN을 이용해서 특정 리전에 관계 없이 전 세계 모든 리전에 람다 함수를 배치할 수 있다.
- CDN 콘텐츠를 내 마음대로 만들 수 있다.
- 내가 쓴 만큼만 지불하면 된다.
- 내가 CloudFront의 요청과 응답을 수정할 수 있다.
- origin으로 아무런 요청을 보내지 않아도 뷰어로의 응답을 만들어 낼 수 있다.