함수의 예약 동시성(Reserved Concurrency) 구성
함수의 예약 동시성(Reserved Concurrency) 구성
Lambda에서 **동시성(concurrency)**은 함수가 현재 처리 중인 진행 중(in-flight) 요청 수입니다. 사용할 수 있는 동시성 제어에는 두 종류가 있습니다.
본문
- 예약 동시성(Reserved concurrency) – 함수에 할당된 동시 인스턴스의 최대·최소 수를 모두 설정합니다. 함수에 예약 동시성이 있으면 다른 함수는 그 동시성을 사용할 수 없습니다. 예약 동시성은 가장 중요한 함수가 들어오는 요청을 처리할 충분한 동시성을 항상 확보하도록 보장하는 데 유용합니다. 또한 데이터베이스 연결 같은 하위 리소스를 압도하지 않도록 동시성을 제한하는 데도 사용할 수 있습니다. 예약 동시성은 하한이자 상한으로 작동합니다. 지정된 용량을 함수 전용으로 예약하는 동시에 그 한도를 넘어 확장되지 않도록 막습니다. 함수에 예약 동시성을 구성해도 추가 비용은 없습니다.
- 프로비저닝된 동시성(Provisioned concurrency) – 함수에 할당된 사전 초기화된 실행 환경 수입니다. 이 실행 환경들은 들어오는 함수 요청에 즉시 응답할 준비가 되어 있습니다. 프로비저닝된 동시성은 함수의 콜드 스타트 지연 시간을 줄이고 함수가 두 자릿수 밀리초 응답 시간으로 제공될 수 있게 하는 데 유용합니다. 일반적으로 대화형(interactive) 워크로드가 이 기능의 혜택을 가장 많이 받습니다. 이는 웹·모바일 애플리케이션처럼 사용자가 요청을 시작하는 애플리케이션으로, 대기 시간에 가장 민감합니다. 데이터 처리 파이프라인 같은 비동기 워크로드는 대기 시간에 덜 민감해 보통 프로비저닝된 동시성이 필요하지 않습니다. 프로비저닝된 동시성을 구성하면 AWS 계정에 추가 비용이 발생합니다.
이 주제는 예약 동시성을 관리·구성하는 방법을 자세히 다룹니다. 이 두 동시성 제어 유형의 개념적 개요는 'Reserved concurrency and provisioned concurrency'를 참고하세요. 프로비저닝된 동시성 구성에 대한 정보는 '함수의 프로비저닝된 동시성 구성'을 참고하세요.
Amazon MQ 이벤트 소스 매핑에 연결된 Lambda 함수에는 기본 최대 동시성이 있습니다. Apache Active MQ의 최대 동시 인스턴스 수는 5, Rabbit MQ의 최대 동시 인스턴스 수는 1입니다. 함수의 예약·프로비저닝된 동시성을 설정해도 이 한도는 바뀌지 않습니다. Amazon MQ를 쓸 때 기본 최대 동시성 증가를 요청하려면 Support에 문의하세요.
이 페이지의 내용:
- 예약 동시성 구성
- 함수에 필요한 예약 동시성 정확히 추정
예약 동시성 구성
함수의 예약 동시성 설정은 Lambda 콘솔이나 Lambda API로 구성할 수 있습니다.
콘솔로 구성:
- Lambda 콘솔의 Functions 페이지를 엽니다.
- 동시성을 예약할 함수를 선택합니다.
- Configuration을 선택한 뒤 Concurrency를 선택합니다.
- Concurrency 아래에서 Edit을 선택합니다.
- Reserve concurrency를 선택하고 함수에 예약할 동시성 양을 입력합니다.
- Save를 선택합니다.
Unreserved account concurrency 값에서 100을 뺀 만큼까지 예약할 수 있습니다. 나머지 100단위 동시성은 예약 동시성을 쓰지 않는 함수를 위한 것입니다. 예를 들어 계정의 동시성 한도가 1,000이라면 1,000단위 모두를 단일 함수에 예약할 수 없습니다.
함수의 동시성 예약은 다른 함수가 사용할 수 있는 동시성 풀에 영향을 줍니다. 예를 들어 function-a에 100단위 동시성을 예약하면, function-a가 예약된 100단위를 모두 쓰지 않더라도 계정의 다른 함수는 나머지 900단위 동시성을 공유해야 합니다.
함수를 의도적으로 제한(throttle)하려면 예약 동시성을 0으로 설정하세요. 그러면 한도를 제거할 때까지 함수가 어떤 이벤트도 처리하지 못합니다.
Lambda API로 예약 동시성을 구성하려면 다음 API 작업을 사용하세요.
PutFunctionConcurrencyGetFunctionConcurrencyDeleteFunctionConcurrency
예를 들어 AWS Command Line Interface(CLI)로 예약 동시성을 구성하려면 put-function-concurrency 명령을 사용합니다. 다음 명령은 my-function이라는 함수에 100단위 동시성을 예약합니다.
aws lambda put-function-concurrency --function-name my-function \
--reserved-concurrent-executions 100
다음과 같은 출력이 보여야 합니다.
{
"ReservedConcurrentExecutions": 100
}
함수에 필요한 예약 동시성 정확히 추정
함수가 현재 트래픽을 처리하고 있다면 CloudWatch 지표로 동시성 지표를 쉽게 볼 수 있습니다. 특히 ConcurrentExecutions 지표는 계정의 각 함수에 대한 동시 호출 수를 보여줍니다.
위 그래프는 이 함수가 주어진 시점에 평균 5~10개의 동시 요청을 처리하고 평상시 하루에 20개 요청에서 정점에 달한다는 것을 보여줍니다. 계정에 다른 함수가 많다고 가정해보세요. 이 함수가 애플리케이션에 중요하고 어떤 요청도 놓치고 싶지 않다면 예약 동시성 설정으로 20 이상의 값을 사용하세요.
또는 다음 수식으로 동시성을 계산할 수도 있습니다.
Concurrency = (average requests per second) * (average request duration in seconds)
초당 평균 요청 수와 평균 요청 시간(초)을 곱하면 예약해야 할 동시성의 대략적인 추정치를 얻을 수 있습니다. 초당 평균 요청 수는 Invocation 지표로, 평균 요청 시간(초)은 Duration 지표로 추정할 수 있습니다. 자세한 내용은 'Lambda와 CloudWatch 지표 사용'을 참고하세요.
또한 상위·하위 스트림의 처리량 제약도 잘 알아두어야 합니다. Lambda 함수는 부하에 따라 원활하게 확장되지만, 상위·하위 의존성은 같은 처리량 능력을 갖지 못할 수 있습니다. 함수가 어디까지 확장될 수 있는지 제한해야 한다면 함수에 예약 동시성을 구성하세요.