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

2분 분량
0

사용량을 기준으로 예상한 것보다 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 배치 작업을 사용할 수도 있습니다.


관련 정보

Amazon SQS 비용 절감