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 구성

  1. Lambda 콘솔의 Functions 페이지를 엽니다.
  2. 함수의 이름을 선택합니다.
  3. Function overview 아래에서 SQS를 선택합니다. Configuration 탭이 열립니다.
  4. Amazon SQS 트리거를 선택하고 Edit을 선택합니다.
  5. Maximum concurrency에 2에서 1,000 사이의 숫자를 입력합니다. maximum concurrency를 끄려면 상자를 비워 둡니다.
  6. 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 액션을 사용해요.

더 알아보기 (Learn more)