On m'a facturé des frais plus élevés que prévu pour Amazon Simple Queue Service (Amazon SQS) en fonction de mon utilisation.
-ou-
J'atteins la limite de l'offre gratuite d'Amazon SQS, mais je n'ai envoyé que quelques messages pendant la période de facturation.
Comment puis-je mieux comprendre les frais d'Amazon SQS, et comment puis-je réduire les coûts d'Amazon SQS ?
Brève description
La cause la plus courante d'un nombre élevé de requêtes SQS sont les réceptions vides, qui sont facturées comme des requêtes ReceiveMessage qui ne renvoient pas de message. Les frais d'Amazon SQS sont basés sur le volume de requêtes et les données transférées vers et depuis Amazon SQS. Un consommateur interrogeant une file d'attente SQS entraîne continuellement des réceptions vides. Ces réceptions vides sont facturées selon la tarification Amazon SQS, même si aucun message n'est envoyé ou reçu de votre file d'attente SQS.
Résolution
Vérification de la métrique CloudWatch NumberOfEmptyReceives
Pour déterminer si les réceptions vides contribuent aux frais élevés d'Amazon SQS, vérifiez la métrique Amazon CloudWatch NumberOfEmptyReceives pour la file d'attente SQS. Un nombre élevé de récepteurs vides indique qu'un consommateur effectue un nombre élevé de requêtes ReceiveMessage.
Vérifiez si la file d'attente SQS est configurée pour appeler une fonction Lambda
Lorsqu'une file d'attente SQS est configurée pour appeler une fonction AWS Lambda, la fonction Lambda interroge longuement la file d'attente. Cela signifie que même si la file d'attente SQS n'est pas utilisée, un appel de fonction Lambda entraîne des réceptions vides et les frais associés.
Bonnes pratiques pour réduire les coûts d'Amazon SQS
Suivez ces bonnes pratiques pour réduire les coûts d'Amazon SQS :
Supprimez les files d'attente qui ne sont pas nécessaires
Pour éviter les requêtes ReceiveMessage faites aux files d'attente inactives, pensez à supprimer les files d'attente SQS lorsqu'elles ne sont plus nécessaires.
Réduisez le nombre de consommateurs
La mise à l'échelle horizontale est utilisée pour maximiser le débit des files d'attente Amazon SQS en augmentant le nombre de producteurs et de consommateurs de messages à mesure que vos besoins en volume augmentent. De même, lorsque le débit de messages diminue, veillez à réduire le nombre de consommateurs pour éviter les requêtes ReceiveMessage inutiles.
Attente active de longue durée
L'attente active de longue durée d'Amazon SQS permet de réduire à la fois les coûts et les réceptions vides. Vous pouvez définir le temps d'attente de ReceiveMessage sur une valeur allant jusqu'à 20 secondes pour activer l'attente active de longue durée. Vous pouvez spécifier le temps d'attente en utilisant l'une des méthodes suivantes :
- Au niveau de la file d'attente, vous pouvez configurer l'attribut de file d'attente ReceiveMessageWaitTimeSeconds.
- Au niveau du message, vous pouvez envoyer l'appel d'API ReceiveMessage avec le paramètre ReceiveMessageWaitTime.
Remarque : la définition du paramètre ReceiveMessageWaitTime au niveau du message dans l'API ReceiveMessage remplace la valeur du paramètre configuré au niveau de la file d'attente. Pour une fonction Lambda appelée à l'aide d'Amazon SQS, Lambda utilise l'attente active de longue durée pour interroger une file d'attente.
Opérations par lot
La tarification Amazon SQS est basée sur le nombre de requêtes. Vous pouvez réduire le nombre de requêtes et, par conséquent, réduire les coûts en regroupant les actions de messages par lots. Par exemple, au lieu d'appeler l'API SendMessage 10 fois, une seule opération SendMessageBatch peut être configurée pour envoyer 10 messages. Les autres actions d'opération par lot disponibles sont DeleteMessageBatch et ChangeMessageVisibilityBatch.
Informations connexes
Réduction des coûts d'Amazon SQS