Je souhaite résoudre les erreurs « ThrottlingException Rate exceeded » dans Amazon Simple Notification Service (Amazon SNS).
Brève description
Si les demandes d'API Amazon SNS dépassent le quota de limitation de l'API, Amazon SNS renvoie une erreur « ThrottlingException Rate exceeded » similaire à la suivante :
« An error occurred (ThrottlingException) when calling the API operation: Rate exceeded »
Remarque : Amazon SNS limite les appels d'API pour améliorer les performances du service. Pour plus d'informations sur les quotas de limitation des API Amazon SNS, consultez la section Points de terminaison et quotas Amazon Simple Notification Service.
Résolution
Identifier l'API limitée
Lorsque la limite de débit dépasse la limite allouée pour un appel d'API, vous recevez un message d'erreur. Vérifiez le message d'erreur ou la pile d'erreurs pour identifier l'action de l'API qui est limitée.
Utiliser les journaux CloudTrail pour vérifier l'événement associé à l'appel d'API Les événements pris en charge sont enregistrés dans un événement CloudTrail, avec d'autres événements de services AWS, dans le cadre de l'historique des événements. Pour plus d'informations, consultez la section Journalisation des appels d'API AWS SNS à l'aide d'AWS CloudTrail.
Vous pouvez également consulter les métriques Amazon CloudWatch pour Amazon SNS. Utilisez les métriques d'utilisation Amazon SNS pour identifier les appels d'API SNS qui ont atteint la limite de débit.
Vérifier le quota de limitation d'API Amazon SNS
Le quota de limitation d'API Amazon SNS varie en fonction de la région AWS. Le quota de messages par seconde est basé sur le nombre de messages publiés dans une région SNS et combine les demandes d'API Publish et PublishBatch Si vous dépassez le quota de messages par seconde pour votre région, vous pouvez recevoir des erreurs de limitation. Pour plus d'informations, consultez la section Limitation d'API Amazon SNS.
Remarque : une fois les journaux CloudTrail activés, les demandes d'API SNS Publish et PublishBatch SNS sont enregistrées dans CloudTrail. Cependant, le type de ressource SNS AWS::SNS::PhoneNumber n'est pas enregistré par CloudTrail.
Utiliser un backoff exponentiel et de nouvelles tentatives
Pour éviter les erreurs de limitation, il est recommandé d'utiliser un backoff exponentiel et de nouvelles tentatives lorsque vous effectuez un appel d'API pour échelonner les intervalles. Veillez à répartir vos appels d'API au fil du temps. Planifiez des actions avec la randomisation afin qu'elles s'étalent dans le temps. Pour plus d'informations, consultez les sections Backoff exponentiel et gigue et Comportement de nouvelle tentative.
Utilisez l'exemple de pseudocode de haut niveau suivant pour un retour en arrière exponentiel et de nouvelles tentatives :
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)
}
}
Demander une augmentation de quota
Si vous avez implémenté un backoff exponentiel et de nouvelles tentatives mais que vous continuez à recevoir des erreurs « ThrottlingException Rate exceeded », soumettez une demande d'augmentation de quota SNS.
Remarque : vous pouvez demander une augmentation de la limite souple, mais vous ne pouvez pas augmenter la limite stricte du quota. Pour en savoir plus, consultez la section Quotas de service.