사용량을 기준으로 예상한 것보다 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 작업을 구성할 수 있습니다. DeleteMessageBatch 및 ChangeMessageVisibilityBatch 배치 작업을 사용할 수도 있습니다.
관련 정보
Amazon SQS 비용 절감