Amazon SQS 요금이 예상보다 높은 이유는 무엇입니까?

최종 업데이트 날짜: 2021년 7월 23일

Amazon Simple Queue Service(Amazon SQS)에 대한 요금이 사용량을 기준으로 예상했던 것보다 높게 청구되었습니다.

-또는-

Amazon SQS 프리 티어 한도에 도달했지만 청구 기간 동안 몇 개의 메시지만 전송했습니다.

Amazon SQS 요금을 더 잘 이해하려면 어떻게 해야 하며 Amazon SQS 비용을 줄이려면 어떻게 해야 합니까?

간략한 설명

SQS 요청 수가 많은 경우 가장 일반적인 원인은 빈 수신이며, 이 수신은 메시지를 반환하지 않는 ReceiveMessage 요청으로 청구됩니다. Amazon SQS 요금은 요청 양과 Amazon SQS에서 송수신되는 데이터를 기준으로 부과됩니다. 소비자가 SQS 대기열을 지속적으로 폴링하면 빈 수신이 발생합니다. 이러한 빈 수신은 SQS 대기열에서 메시지를 보내거나 수신하지 않더라도 Amazon SQS 요금에 따라 요금이 청구됩니다.

해결 방법

NumberOfEmptyReceives CloudWatch 지표 검토

빈 수신이 높은 Amazon SQS 요금에 기여하는지 확인하려면 SQS 대기열에 대한 Amazon CloudWatch NumberOfEmptyReceives 지표를 검토하세요. 빈 수신 수가 많으면 소비자가 많은 수의 ReceiveMessage 요청을 하고 있음을 나타냅니다.

SQS 대기열이 Lambda 함수를 호출하도록 구성되어 있는지 확인

SQS 대기열이 AWS Lambda 함수를 호출하도록 구성된 경우 Lambda는 대기열을 길게 폴링합니다. 즉, SQS 대기열이 사용되지 않더라도 Lambda 함수 호출로 인해 빈 수신 및 관련 요금이 발생합니다.

Amazon SQS 비용 절감을 위한 모범 사례

다음 모범 사례를 따라 Amazon SQS 비용을 최소화합니다.

필요하지 않은 대기열 제거

비활성 대기열에 대한 ReceiveMessage 요청을 방지하려면 더 이상 필요하지 않은 SQS 대기열을 삭제하는 것이 좋습니다.

소비자 규모 축소

수평 확장은 볼륨 요구 사항이 증가함에 따라 메시지 생산자와 소비자 모두의 수를 늘려 Amazon SQS 대기열 처리량을 극대화하는 데 사용됩니다. 마찬가지로 메시지 속도가 감소하면 불필요한 ReceiveMessage 요청을 방지하기 위해 소비자를 축소해야 합니다.

긴 폴링

Amazon SQS 긴 폴링은 비용과 빈 수신을 모두 줄이는 데 도움이 됩니다. ReceiveMessage 대기 시간을 최대 20초 값으로 설정하여 긴 폴링을 활성화할 수 있습니다. 다음 방법 중 하나를 사용하여 대기 시간을 지정할 수 있습니다.

  • 대기열 수준에서 ReceiveMessageWaitTimeSeconds 대기열 속성을 구성할 수 있습니다.
  • 메시지 수준에서 ReceiveMessageWaitTime 파라미터를 사용하여 ReceiveMessage API 호출을 보낼 수 있습니다.
    참고: ReceiveMessage API의 메시지 레벨에서 ReceiveMessageWaitTime 파라미터를 설정하면 대기열 수준에서 구성된 파라미터 값이 재정의됩니다. Amazon SQS를 사용하여 호출된 Lambda 함수의 경우 Lambda는 긴 폴링을 사용하여 대기열을 폴링합니다.

배치 작업

Amazon SQS 요금은 요청 수를 기준으로 책정됩니다. 메시지 작업을 일괄 처리하여 요청 수를 줄이고 비용을 줄일 수 있습니다. 예를 들어, SendMessage API를 10번 호출하는 대신 10개의 메시지를 보내도록 단일 SendMessageBatch 작업을 구성할 수 있습니다. 사용 가능한 다른 배치 작업 작업에는 DeleteMessageBatchChangeMessageVisibilityBatch가 있습니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?