SQS 이벤트 소스 매핑의 확장 동작 구성하기
SQS 이벤트 소스 매핑의 확장 동작 구성하기 (Configuring scaling behavior for SQS event source mappings)
출처: AWS Lambda 개발자 안내서 Amazon SQS 이벤트 소스 매핑의 확장 동작은 최대 동시성(maximum concurrency) 설정이나 provisioned mode 활성화로 제어할 수 있어요. 이 두 옵션은 상호 배타적이에요.
기본적으로 Lambda는 메시지 양에 따라 이벤트 폴러를 자동으로 확장해요. provisioned mode를 활성화하면 예상 트래픽 패턴을 처리하도록 준비된 전용 폴링 리소스의 최소·최대 수를 할당해요. 이벤트 소스 매핑의 성능은 두 가지 방식으로 최적화할 수 있어요.
- 표준 모드(기본값): Lambda가 확장을 자동 관리하며 소수의 폴러로 시작해 워크로드에 따라 확장·축소합니다.
- Provisioned mode: 최소·최대 한도가 있는 전용 폴링 리소스를 구성해 3배 빠른 확장과 최대 16배 높은 처리 용량을 제공합니다.
표준 큐에서 Lambda는 롱 폴링(long polling)으로 큐가 활성화될 때까지 폴링해요. 메시지를 사용할 수 있으면 Lambda는 함수의 5개 동시 호출로 한 번에 5개 배치를 처리하기 시작해요. 메시지가 여전히 사용 가능하면 Lambda는 분당 최대 300개의 추가 동시 호출로 배치를 읽는 프로세스 수를 늘려요. 이벤트 소스 매핑이 동시에 처리할 수 있는 최대 호출 수는 1,250이에요. 트래픽이 적으면 Lambda는 처리를 5개 동시 호출로 축소하고, Amazon SQS 호출과 관련 비용을 줄이기 위해 최소 2개 동시 호출까지 최적화할 수 있어요. 하지만 이 최적화는 maximum concurrency 설정을 활성화하면 사용할 수 없어요.
FIFO 큐에서 Lambda는 받은 순서대로 함수에 메시지를 보내요. FIFO 큐에 메시지를 보낼 때 message group ID를 지정해요. Amazon SQS는 같은 그룹의 메시지가 순서대로 Lambda에 전달되도록 보장해요. Lambda가 메시지를 배치로 읽을 때 각 배치에는 둘 이상의 메시지 그룹의 메시지가 포함될 수 있지만, 순서는 유지돼요. 함수가 오류를 반환하면 함수는 Lambda가 같은 그룹의 추가 메시지를 받기 전에 영향을 받은 메시지에 대한 모든 재시도를 시도해요.
provisioned mode를 사용할 때 각 이벤트 폴러는 최대 1MB/s의 처리량, 최대 10개의 동시 호출, 또는 초당 최대 10개의 Amazon SQS 폴링 API 호출을 처리할 수 있어요. Lambda는 구성된 최소·최대 사이에서 이벤트 폴러 수를 확장해 분당 최대 1,000의 동시성을 빠르게 추가해 Amazon SQS 이벤트의 일관되고 낮은 지연 처리를 제공해요. provisioned mode 사용에는 추가 비용이 발생해요.
각 이벤트 폴러는 초당 최대 10회의 롱 폴링으로 SQS 큐에 폴링하며, 이는 SQS API 요청 비용이 발생해요. maximum concurrency 설정과 함께 사용할 수 없으므로 maximum concurrency 설정 대신 이 최소·최대 이벤트 폴러 설정으로 확장·동시성을 제어해요.
참고
maximum concurrency 설정과 provisioned mode를 동시에 사용할 수 없어요. provisioned mode가 활성화되면 최소·최대 이벤트 폴러 수로 Amazon SQS 이벤트 소스 매핑의 확장·동시성을 제어해요.
Amazon SQS 이벤트 소스의 최대 동시성 구성
maximum concurrency 설정으로 SQS 이벤트 소스의 확장 동작을 제어할 수 있어요. maximum concurrency는 provisioned mode가 활성화된 상태에서는 사용할 수 없어요. maximum concurrency 설정은 Amazon SQS 이벤트 소스가 호출할 수 있는 함수의 동시 인스턴스 수를 제한해요. maximum concurrency는 이벤트 소스 수준 설정이에요. 하나의 함수에 여러 Amazon SQS 이벤트 소스를 매핑했다면 각 이벤트 소스는 별도의 maximum concurrency 설정을 가질 수 있어요.
maximum concurrency를 사용해 한 큐가 함수의 reserved concurrency 전부나 계정의 나머지 concurrency 할당량을 사용하지 못하게 할 수 있어요. Amazon SQS 이벤트 소스에 maximum concurrency를 구성하는 것에는 요금이 없어요.
중요하게도 maximum concurrency와 reserved concurrency는 두 개의 독립적인 설정이에요. maximum concurrency를 함수의 reserved concurrency보다 높게 설정하지 마세요. maximum concurrency를 구성한다면 함수의 reserved concurrency가 함수의 모든 Amazon SQS 이벤트 소스의 총 maximum concurrency보다 크거나 같게 하세요. 그렇지 않으면 Lambda가 메시지를 스로틀할 수 있어요.
계정의 concurrency 할당량이 기본값 1,000으로 설정되어 있으면 maximum concurrency를 지정하지 않는 한 Amazon SQS 이벤트 소스 매핑은 이 값까지 함수 인스턴스를 호출하도록 확장할 수 있어요.
계정의 기본 concurrency 할당량 증가를 받았다면 Lambda가 새 할당량까지 동시 함수 인스턴스를 호출하지 못할 수 있어요. 기본적으로 Lambda는 Amazon SQS 이벤트 소스 매핑에 대해 최대 1,250개의 동시 함수 인스턴스까지 확장할 수 있어요. 이것이 사용 사례에 부족하다면 AWS 지원에 문의해 계정의 Amazon SQS 이벤트 소스 매핑 동시성 증가를 논의하세요.
참고
FIFO 큐에서 동시 호출은 message group ID(messageGroupId) 수 또는 maximum concurrency 설정 중 더 낮은 값으로 상한이 정해져요. 예를 들어 message group ID가 6개이고 maximum concurrency가 10으로 설정되어 있으면 함수의 최대 동시 호출은 6개예요.
new 및 기존 Amazon SQS 이벤트 소스 매핑 모두에 maximum concurrency를 구성할 수 있어요.
Lambda 콘솔로 maximum concurrency 구성
- Lambda 콘솔의 Functions 페이지를 엽니다.
- 함수의 이름을 선택합니다.
- Function overview 아래에서 SQS를 선택합니다. Configuration 탭이 열립니다.
- Amazon SQS 트리거를 선택하고 Edit을 선택합니다.
- Maximum concurrency에 2에서 1,000 사이의 숫자를 입력합니다. maximum concurrency를 끄려면 상자를 비워 둡니다.
- Save를 선택합니다.
AWS CLI로 maximum concurrency 구성
--scaling-config 옵션과 함께 update-event-source-mapping 명령을 사용해요. 예시:
aws lambda update-event-source-mapping \
--uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
--scaling-config '{"MaximumConcurrency":5}'
maximum concurrency를 끄려면 --scaling-config에 빈 값을 입력해요.
aws lambda update-event-source-mapping \
--uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
--scaling-config "{}"
Lambda API로 maximum concurrency 구성
ScalingConfig 객체와 함께 CreateEventSourceMapping 또는 UpdateEventSourceMapping 액션을 사용해요.