Public Cloud/AWS

AWS : Serverless 개요, AWS Lambda

서머스 2022. 6. 27. 00:01

서버리스란?

- 서버를 더이상 관리할 필요가 없다

- 단지 코드=함수를 배치하기만 하면 된다.

- 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으로 아무런 요청을 보내지 않아도 뷰어로의 응답을 만들어 낼 수 있다.