[Serverless Service] Lambda

728x90

Serverless 개요

  • 서버리스라는 말은 서버가 없다는 것이 아니라 서버를 관리할 필요가 없다는 뜻이다. 즉, 서버를 프로비저닝 하지 않는 것 이다.
  • 서버를 관리하지 않고 필요한 것들을 배치해서 가져다가 쓰기만 하면 된다는 뜻으로 코드를 배치하기만 하면 된다.
  • 원래 서버리스는 FaaS, Function as a Service 를 뜻했지만 지금의 서버리스는 더 많은 것을 뜻한다.
  • AWS 의 Lambda, DynamoDB, API Gateway, Cognito, S3, SQS, SNS, Kinesis Data Firehose, Aurora 서버리스, Fargate 등이 서버리스 서비스이다.

Lambda 개요

  • 클라우드에서 가상으로 실행되는 서버로 관리할 서버 없이 코드를 프로비저닝하면 함수가 실행된다.
  • 15분이라는 제한 시간이 있고, 온디맨드로 실행되어 실행한 만큼 비용을 청구한다.
  • 자동으로 오토 스케일링이 된다.
  • 요금을 계산하기 쉽다. Lambda 가 수신하는 요청의 횟수에 따라 비용이 청구된다. 프리 티어에서도 Lambda 를 넉넉하게 제공해준다.
  • Lambda 에서 여러 프로그래밍 언어를 지원해줘서 코드 작성에 있어서 자유롭다. CloudWatch 와 모니터링 통합도 쉬운 편이다.
  • Lambda 의 RAM 을 증가시킬 경우 CPU 와 네트워크 속도도 같이 향상된다.
  • 많은 AWS 서비스에 붙여서 사용할 수 있기 때문에 범용성이 좋다.

AWS Lambda Limits to Know - per region.md

  • Execution 제한
    • 메모리 할당은 128MB ~ 10GB 까지 가능하며 1MB 씩 증가시킬 수 있다. 메모리를 증가시키면 vCPU 가 늘어난다.
    • 최대 실행 시간은 15분이다.
    • 환경 변수의 파일 크기는 최대 4KB 를 가질 수 있다.
    • 람다 함수를 생성하는 동안 용량이 큰 파일을 가져와야 할 경우에 /tmp 폴더를 사용할 수 있고 512MB 크기를 갖는다.
    • 최대 1000건까지 동시 실행이 가능하다.
  • Deployment 제한
    • 람다 함수의 압축 파일 크기는 최대 50MB 이다. 압축하지 않았을 경우 최대 250MB 의 크기를 갖는다. 만약 용량이 더 크다면 /tmp 폴더를 사용해야 한다.
    • 환경 변수의 파일 크기는 최대 4KB 를 가질 수 있다.
  • 즉, 램이 30GB 필요하거나 3GB 의 용량이 큰 파일이 필요한 워크 로드의 경우 람다가 어울리지 않는다.

Lambda@Edge

  • 엣지 로케이션 마다 글로벌 람다 함수를 실행하고 싶을 때 사용한다.
  • Lambda@Edge 는 CloudFront CDN 을 통해서 특정 리전이 아닌 전 세계의 모든 리전에 람다 함수를 배치한다. -> 응답성이 뛰어난 애플리케이션을 구축하기 위해서이다.
  • 서버리스 서비스이기 때문에 서버를 관리할 필요가 없으며 CDN 을 통해 전송되는 컨텐츠를 사용자가 지정할 수 있고 온디맨드 바탕이기 때문에 사용한만큼 돈을 지불한다.
  • Lambda@Edge 를 사용하여 CloudFront 로 오는 request 와 response 를 변경한다.
  • Lambda@Edge 에는 4가지 람다 함수가 있다.
    • viewer request: viewer request 의 경우 CloudFront 가 사용자로부터 request 를 수신하면 람다 함수를 통해 request 를 수정한다.
    • origin request: CloudFront 가 origin 으로 request 를 전달하기 이전 단계에서 람다 함수를 통해 request 를 수정한다.
    • origin response: CloudFront 가 origin 으로부터 response 를 수신할 때 이뤄지며 해당 단계에서 람다 함수를 통해 response 를 수정한다.
    • viewer response: CloudFront 가 response 를 viewer 로 전달하기 전에 람다 함수를 통해 response 를 수정한다. 그래서 origin 으로 request 를 보내지 않더라도 viewer 로 보내는 response 를 만들어 보낼 수 있다.

Lambda@Edge: Global application

S3 에 정적 웹사이트가 호스팅 되고 웹사이트에 사용자가 방문하면 클라이언트 측의 자바스크립트를 통해 CloudFront 로 API 요청을 보내고 CloudFront 는 전 세계의 엣지 로케이션에서 실행되는 Lambda@Edge 함수를 실행한다.

람다 함수는 다이나모 DB 의 데이터를 쿼리할 수 있게 된다.

Lambda@Edge 사용 예시

Lambda@Edge 는 웹사이트 보안 및 동적 웹 애플리케이션에서 검색 엔진 최적화, 오리진과 데이터 센터 사이에서 인텔리한 경로 찾기, 실시간 이미지 변환, 오리진 도달 전에 사용자 인증 및 권한 부여, 사용자 우선순위 지정, 사용자 추적 및 분석 등을 위해 사용된다.

Lambda@Edge 는 람다 함수와 CloudFront 를 통합해서 viewer, origin 의 req, res 를 수정하는 경우 사용한다.

728x90