Amazon SNS의 “ThrottlingException” 및 “Rate exceeded” 오류를 해결하려면 어떻게 해야 하나요?

3분 분량
0

Amazon Simple Notification Service(SNS)에서 발생하는 “ThrottlingException” 및 “Rate exceeded” 오류를 해결하고 싶습니다.

간략한 설명

Amazon SNS API 호출은 각 AWS 계정 및 리전 당 허용되는 최대 API 요청 속도를 초과할 수 없습니다. API 요청이 이 API 제한 할당량을 초과할 경우 추가 API 호출이 제한되며 이로 인해 Amazon SNS가 ThrottlingException 오류를 반환합니다.

Amazon SNS의 ThrottlingException 오류 메시지 예제:

  • "An error occurred (ThrottlingException) when calling the Subscribe operation: Rate exceeded"
  • "An error occurred (ThrottlingException) when calling the ListOriginationNumbers operation: Rate exceeded"
  • "An error occurred (ThrottlingException) when calling the ListPhoneNumbersOptedOut operation: Rate exceeded"
  • "An error occurred (ThrottlingException) when calling the publish operation: Rate exceeded"
  • "An error occurred (ThrottlingException) when calling the GetSMSAttributes operation: Rate exceeded"

**참고:**Amazon SNS API 호출은 서비스 성능을 향상하기 위해 제한됩니다. Amazon SNS API 제한 할당량에 대한 자세한 내용을 보려면 Amazon 단순 알림 서비스 엔드포인트 및 할당량을 참조하세요.

해결 방법

제한이 발생한 API 확인

오류를 일으키는 API 작업 확인하기

API 호출에 할당된 속도 제한 한도를 초과하면 오류 응답이 반환됩니다. 오류 메시지 또는 오류 스택을 확인하여 제한 현상이 발생한 API 작업을 확인하세요.

CloudTrail 로그를 사용하여 API 호출 이벤트 확인하기

아마존 SNS와 AWS CloudTrail는 통합되어 있습니다. CloudTrail은 아마존 SNS API 호출을 이벤트로 캡처합니다. 이러한 이벤트에는 Amazon SNS 콘솔 호출 및 Amazon SNS API 작업 코드 호출이 포함됩니다. 지원 이벤트는 이벤트 기록의 일부로서 기타 AWS 서비스 이벤트와 함께 CloudTrail 이벤트에 기록됩니다. CloudTrail 이벤트에 대한 자세한 내용을 보려면 CloudTrail에서의 Amazon SNS 정보를 참조하세요.
**참고:**게시 또는 PublishBatch API 요청은 CloudTrail에서의 이벤트 로깅을 지원하지 않습니다.

지역별 할당량 검사

게시 API 대신 PublishBatch API를 사용하여 메시지를 보내는 경우에도 지역별 할당량으로 인해 제한 현상이 발생할 수 있습니다. 예를 들어 지역 메시지 할당량이 초당 30,000개인 경우에도 다음과 같은 이유로 속도 제한이 초과될 수 있습니다.

  • 게시 작업을 통해 초당 30,000개를 게시하는 API 요청 속도로 30,000개의 메시지를 게시했습니다(API 요청당 메시지 1개 게시).
  • PublishBatch 작업을 통해 초당 3,000개를 게시하는 API 요청 속도로 30,000개의 메시지를 게시했습니다(대량 API 요청당 메시지 10개 게시).
  • 게시 작업을 통해 초당 10,000개를 게시하는 API 요청 속도로 10,000개의 메시지를 게시했습니다(API 요청당 메시지 1개 게시). 또한 PublishBatch 작업을 통해 초당 2,000개를 게시하는 API 요청 속도로 20,000개의 메시지를 게시했습니다(대량 API 요청당 메시지 10개 게시). 이를 통해 초당 총 30,000개의 메시지를 게시하였습니다.

초당 메시지 할당량은 Amazon SNS 리전으로 게시된 메시지 수를 기반으로 게시 및 PublishBatch API 요청을 합산하여 산정됩니다. 자세한 내용을 보려면 Amazon 단순 알림 서비스 엔드포인트 및 할당량게시 API 제한기타 API 제한을 참조하세요.

ThrottlingException 오류 방지를 위한 모범 사례

API 호출 시 시간 간격 두기

AWS API 엔드포인트를 사용할 때 지수 백오프 및 재시도를 사용하여 API 호출 수를 줄입니다. 지수 백오프 및 재시도에 사용되는 다음의 고급 예제와 유사한 코드를 사용하세요.

MakeSDKRequest() {
  attempts = 0
  loop {
    GetSendToken()
    response = SNSAPIRequest()
    RequestBookkeeping(response)
    if not Retryable(response)
      return response
    attempts += 1
    if attempts >= MAX_ATTEMPTS:
      return response
    if not HasRetryQuota(response)
      return response
    delay = ExponentialBackoff(attempts)
    sleep(delay)
  }
}

서비스 할당량 증가 요청

지수 백오프 및 재시도를 구현한 후에도 ThrottlingException 오류가 계속 발생하는 경우 오류가 발생한 API의 서비스 할당량 증가를 요청하세요. 이 경우, 사용 사례 설명에 제한 현상이 발생한 기간과 할당량 증가를 요청하는 이유를 포함해야 합니다.

서비스 할당량 대시보드에서 SNS 서비스 현재 할당량을 참조할 수도 있습니다.
참고: AWS 리전에 대한 서비스 할당량 증가를 요청했는지 확인하세요.

**중요:**약한 제한, Amazon SNS 할당량을 대상으로만 서비스 할당량 증가를 요청할 수 있습니다. 엄격한 제한의 경우 Amazon SNS 할당량을 늘릴 수 없습니다. 자세한 내용을 보려면 Service Quotas을 참조하세요.

AWS 공식
AWS 공식업데이트됨 7달 전