IWished
article thumbnail
Published 2023. 5. 12. 18:04
AWS Lambda MicroService/Serverless

AWS Lambda

Lambda는 AWS가 제공하는 서버리스 컴퓨팅 FaaS 솔루션으로, 함수의 인스턴스를 실행하여 이벤트를 처리한다.

서버리스
 

ServerLess

서버리스 서버리스 아키텍처 서버리스는 "서버가 없다"라는 뜻인데, 서비스를 하는데 있어 어찌되었든 저장소는 필요하고 서버는 필요하기 때문에 정말로 서버가 없다는 것은 아니다. 따라서

nninzoo.tistory.com

특징으로는 서버를 프로비저닝하거나 관리할 필요 없이 작성한 코드를 실행하게 해주는 서버리스 컴퓨팅 서비스로서 모든 유형의 애플리케이션이나 백엔드 서비스에 대한 코드를 별도의 관리 없이 서비스 할 수 있다.

또한 다른 AWS 서비스들과 연동이 용이하고 높은 가용성을 제공한다.

장점

1. 비용절감

람다는 사용자가 필요할 때만 함수를 호출하여 이벤트를 처리하기 때문에 항상 서버를 켜두고 있지 않아도 된다.

요금이 람다함수의 요청 수와 람다코드의 실행시간에 따라서 부과되므로 비용을 절약할 수 있다.

 

2. 인프라 운영관리 부담 절감

성능이나 보안과 같은 서버 자체의 관리를 AWS가 해주기 때문에 서버를 관리할 필요가 없고, 운영관리에 대한 부담이 줄어들게 된다.

람다는 트래픽이 증가하면 알아서 자동으로 오토스케일링이 된다.

 

3. 빠른 개발 배포

람다를 이용하면 개발 및 배포에 대한 소요시간이 짧아진다.

AWS 자체에서 많은 기능을 제공해주기 때문에 API 연동이 쉽고 배포 방법도 쉽다.

코드가 계속 실행되지 않고 특정한 시기에만 실행되는 경우 람다를 사용하면 유용하다.

단점

1. 리소스 제한

람다의 메모리는 최대 10GB, 처리시간은 최대 900초로 제한되어 있다.

하나의 함수가 한 번 호출될 때 최대 10GB의 메모리까지 사용이 가능하고 처리시간은 최대 15분으로 직접 서버에서 실행시키는 것보다 스펙이 부족하다.

2. Stateless

람다는 함수가 호출되면 새로운 컨테이너를 띄우는 방식으로, 별도의 상태를 저장하지 않는다.

즉, 람다 함수가 이벤트에 의해 트리거 될 때마다 완전히 새로운 환경에서 호출되는 것으로, 이전 이벤트의 실행 컨텍스트에 대한 액세스 권한이 없다보니 db connection을 유지하는 것 같은 기능은 수행하지 못한다.

3. ColdStart

람다는 리소스를 효율적으로 사용하기 위해 오래동안 사용하지 않는 경우 컴퓨팅파워를 잠시 꺼둔다.

이 때 다시 사용하려고 하면 람다 컨테이너를 띄우기 위해 서버가 켜지고 실행환경을 구성해야되기 때문에 시간이 걸린다.

즉, 요청을 받아 람다함수를 실행시키면 어느정도 딜레이가 발생할 수 있다.

[콜드스타트 해결방법]
1. 람다를 계속 호출
항상 컨테이너가 준비되어 있도록 람다를 지속적으로 호출해주는 방법
호출이 될 때마다 비용이 산정되기 때문에 비용이 더 들 수 있다.

2. 람다의 메모리 늘리기
메모리를 더 할당할 수록 컴퓨팅 스펙이 높아지기 때문에 처리속도가 빨라진다.

3. 프로비저닝된 동시성 활성화
2019년에 콜드스타트 문제를 해결하기 위해 나온 옵션으로 함수의 호출에 바로 응답할 수 있게 미리 준비하는 옵션이다.
이를 활성화 하면 미리 함수의 환경을 세팅해주기 때문에 딜레이는 줄어들지만 추가적인 비용이 발생한다.

4. 동시성 제한

동시성이란 특정 시각에 함수가 제공하는 요청 수이다.

함수가 호출되면 Lambda는 함수의 인스턴스를 할당하여 이벤트를 처리하고, 실행을 마치면 다른 요청을 처리할 수 있다.

이 때 각 리전별로 동시에 실행할 수 있는 람다함수의 개수를 최대 1000개로 제한하고 있어서 요청 수가 이를 넘기면 람다가 수행되지 않는 문제점이 발생할 수 있다.

[동시성 해결방법]
1. 예약된 동시성을 통해 동시성 개수 늘리기
함수에 대한 최대 동시 인스턴스를 보장하는 옵션이다.
특정 람다함수에 대한 최대 동시 인스턴스를 보장해준다는 의미로, 프로비저닝과는 다르게 요금이 부과되지 않는다.

2. Limit Licrease 요청
최적화를 해도 최대동시성 수를 넘길 경우 AWS에 서비스 할당량 증가 요청을 하여 동시실행 수를 늘려달라고 할 수 있다.

람다 함수 구성

Node.js 람다함수 문법 구성

  • myHandler : Lambda 함수의 이름
  • event : Lambda를 트리거 한 이벤트에 대한 모든 정보가 포함된 event 객체
    • AWS 서비스가 함수를 호출할 때, 이벤트 구조는 서비스 별로 다름
  • context : 컨텍스트 객체로 호출, 함수 및 실행 환경에 대한 정보가 포함되어 있음
  • callback: 람다 함수 내부에서 모든 작업을 수행한 후 그에 대한 결과를 비동기 응답으로 전송한다.

트리거

트리거는 lambda 함수를 호출하는 리소스 또는 구성이다.

트리거에는 이벤트 소스를 제공하는 AWS 서비스가 포함될 수 있다.

Lambda와 함께 사용하는 서비스에 따라 호출은 일반적으로 두 가지 방법 중 하나로 작동한다.

이벤트가 호출을 유도하거나, Lambda가 대기열 또는 데이터 스트림을 폴링하고 대기열 또는 데이터 스트림의 활동에 대한 응답으로 함수를 호출한다.

'MicroService > Serverless' 카테고리의 다른 글

API Gateway  (0) 2023.05.12
ServerLess  (1) 2023.05.03