[AWS] Lambda 란

기본 개념

  • AWS에서 제공하는 서버리스 컴퓨팅 서비스
  • 기본적으로 이벤트 드라이븐 방식으로 동작
  • API Gateway와 Elastic Load Balancer가 받은 요청을 기반으로 실행 또는 이벤트 브릿지를 통해 외부 서비스의 이벤트로 람다 함수를 실행하는 것도 가능
  • S3객체, DynamoDB, Kinesis 등에서 발생하는 이벤트를 트리거로 실행하는 것도 가능함
  • 현재 지원하는 node 버전은 10,12,14

람다함수 트리거

클라우드와치 이벤트(CloudWatch Events)

  • 클라우드 와치 이벤트 규칙의 소스는 크게 시간과 다른 서비스의 이벤트로 나뉨
  • 시간을 사용하는 경우 크론잡과 같이 실행 스케줄을 지정해 람다 함수를 실행하는 것이 가능
  • 이벤트 기반으로 소스를 받는 경우 AWS의 다른 서비스들과 느슨하게 결합해서 람다를 실행할 수 있음

S3 객체 이벤트

  • S3 버킷의 특정한 이벤트를 소스로 받아 람다 함수를 실행하는 것이 가능
  • ex) 사용자가 파일을 추가하거나 변경하면 자동적으로 메타데이터를 추출하는 람다 함수를 실행
  • ex) 이미지가 업로드 되면 특정 크기로 리사이즈하는 람다 함수를 실행

외부 이벤트

  • 아마존 이벤트브릿지(Amazon EventBridge)를 통해서 외부 서비스의 이벤트를 기반으로 람다 함수를 실행할 수 있음
  • 2020년 2월 기준 데이터독Datadog, 뉴 렐릭New Relic, 페이저듀티PagerDuty, 젠데스크ZenDesk 등의 서비스를 지원하고 있음
  • 지원하는 모든 외부 서비스 목록은 Amazon EventBridge 통합 페이지를 참고

API 게이트웨이(API Gateway)

  • API 게이트웨이를 통해 HTTP 요청을 람다 함수를 사용해 처리할 수 있음
  • 원래는 REST API만 지원해서 간단한 API를 구축하기에는 복잡한 편이었지만, 2019년 12월 API 게이트웨이 서비스에 HTTP API 방식이 추가되면서 좀 더 쉽게 사용할 수 있게 되었음

애플리케이션 로드 밸런서의 타깃 그룹

  • 람다 함수를 애플리케이션 로드 밸런서의 타깃 그룹으로 지정해서 요청을 처리할 수 있음
  • API 게이트웨이와 달리 애플리케이션 로드 밸런서를 사용하는 경우 고정 비용이 발생

AWS 람다 확장 기능 및 관련 서비스

AWS 람다 엣지(AWS Lambda Edge)

  • 클라우드 프론트에서 제공하는 기능
  • 클라우드 프론트 엣지 상에서 람다 함수를 실행
  • 클라우드 프론트 엣지는 CDN 파일을 전송해주는 캐시 서버로 리전보다 훨씬 다양한 위치에 있음
  • 람다@엣지는 엣지 로케이션 직접 컴퓨팅을 수행하기 때문에 사용자에게 훨씬 더 빠르게 결과를 제공할 수 있음
  • 헤더 조작, SEO, 실시간 이미지 변환 등의 용도로 사용되며 일반 람다 함수보다 실행 시간 및 리소스 제약이큼
  • 2020년 1월 기준 아마존 웹 서비스의 경우 22개 리전과 199개 엣지 로케이션에서 서비스가 되고 있음

AWS 람다 레이어(AWS Lambda Layers)

  • AWS 람다 함수를 배포할 때는 함수 실행에 필요한 모든 파일을 포함해야함
  • 이전에는 다수의 함수를 배포할 때 공통된 부분이 있더라도 매번 같은 내용을 람다 함수에 포함시켜야만 했음
  • 2018년 리인벤트에서 발표된 람다 레이어를 사용하면 공통된 부분을 레이어로 만들고 함수들 간에 공유해서 사용하는 것이 가능
  • 레이어는 같은 계정뿐만 아니라 다른 계정들 사이에도 서로 공유해서 사용하는 것이 가능함

프로비저닝 컨커런시(Provisioned Concurrency)

  • 콜드 스타트 문제를 해결하기 위해 미리 람다 함수를 실행할 수 있도록 준비해두는 기능
  • 많은 동시 호출과 낮은 레이턴시가 둘 다 중요한 경우 프로비저닝 컨커런시 기능을 사용해 문제를 해결할 수 있음

스텝 펑션(Step Functions)

  • AWS 람다 함수들을 조합해 위크플로우를 구성하는 서비스
  • ASL(Amamzon States Lanugage)로 작성된 워크플로우(상태 머신)를 실행
  • AWS 람다를 비롯하여 AWS 배치(AWS Batch), Amazon SNS, Amazon SQS, DBDynamoDB 등 다양한 서비스와 통합해서 사용할 수 있음

RDS 프록시(RDS Proxy)

  • 클라이언트와 RDS 데이터베이스 사이에서 커넥션을 관리해주는 서비스
  • 일반적인 서버 애플리케이션의 경우 자체적으로 데이터베이스 연결을 풀링하므로 예상가능한 범위에서 연결수가 유지됨
  • 이와 달리 데이터베이스를 조작하는 람다 함수의 경우 갑작스럽게 요청이 늘어나면 커녁션 수도 급격하게 늘어나서 데이터베이스 메모리 부족 등의 문제가 발생할 수 있음
  • RDS 프록시를 사용하면 이러한 문제를 완화할 수 있음

프레임워크

  • AWS 람다는 단독으로 개발하고 배포할 수도 있지만, 다른 서비스와의 연동과 배포 편의성 등을 위해 프레임워크를 사용해서 개발하기도 함

서버리스(Serverless)

  • 서버리스는 AWS 람다를 비롯해 애저 펑션, 구글 클라우드 펑션 등을 지원하는 범용 서버리스 프레워크
  • AWS 람다의 경우, 람다 함수 배포 뿐아니라 클라우드 포메이션 스택을 통해 IAM, DynamoDB, S3, 클라우드 와치 이벤트(CloudWatch Events) 등 아마존 리소스를 함께 지원하고 있음
  • 오픈소스 버전은 무료로 제공되고 있으며, 추가 기능이 포함된 프로 버전은 유료로 제공됩니다.

에이펙스(Apex)

  • 에이펙스(Apex)는 T. J. 할로웨이척T. J. Holowaychuk의 주도로 2016년 처음 공개된 서버리스 프레임워크
  • AWS Lambda가 나오고 한 동안 서버리스Serverless 프레임워크와 함께 많이 사용되었음
  • 현재는 더 이상 개발되고 있지 않음

links

social