Wie behebe ich die Fehler „ThrottlingException“ und „Rate exceeded“ in Amazon SNS?

Lesedauer: 4 Minute
0

Ich möchte die Fehler „ThrottlingException“ und „Rate exceeded“ in Amazon Simple Notification Service (Amazon SNS) beheben.

Kurzbeschreibung

API-Aufrufe in Amazon SNS dürfen die maximal zulässige API-Anforderungsrate für jedes AWS-Konto und jede Region nicht überschreiten. Wenn API-Anfragen dieses API-Drosselkontingent überschreiten, werden weitere API-Aufrufe gedrosselt und Amazon SNS gibt einen ThrottlingException-Fehler zurück.

Beispiele für ThrottlingException-Fehlermeldungen in Amazon SNS:

  • „Beim Aufruf der Subscribe-Operation ist ein Fehler aufgetreten (ThrottlingException): Rate überschritten“
  • „Beim Aufrufen der ListOriginationNumbers-Operation ist ein Fehler aufgetreten (ThrottlingException): Rate überschritten“
  • „Beim Aufrufen der ListPhoneNumbersOptedOut-Operation ist ein Fehler aufgetreten (ThrottlingException): Rate überschritten“
  • „Beim Aufrufen des Veröffentlichungsvorgangs ist ein Fehler aufgetreten (ThrottlingException): Rate überschritten“
  • „Beim Aufrufen der GetSMSAttributes-Operation ist ein Fehler aufgetreten (ThrottlingException): Rate überschritten“

Hinweis: Amazon-SNS-API-Aufrufe werden gedrosselt, um die Serviceleistung zu verbessern. Weitere Informationen zu API-Drosselungskontingenten in Amazon SNS finden Sie unter Amazon Simple Notification Service endpoints and quotas.

Behebung

Identifizieren der gedrosselten API

Identifizieren Sie die API-Aktion, die den Fehler verursacht

Wenn das Ratenlimit das für einen API-Aufruf zugewiesene Limit überschreitet, erhalten Sie eine Fehlerantwort. Überprüfen Sie die Fehlermeldung oder den Fehlerstapel, um die API-Aktion zu identifizieren, die gedrosselt wird.

Verwenden von CloudTrail-Protokollen, um das Ereignis für den API-Aufruf zu überprüfen

Amazon SNS ist in AWS CloudTrail integriert. CloudTrail erfasst API-Aufrufe für Amazon SNS als Ereignisse. Zu diesen Ereignissen gehören Aufrufe von der Amazon-SNS-Konsole und Code-Aufrufe der Amazon-SNS-API-Operationen. Die unterstützten Ereignisse werden zusammen mit anderen AWS-Serviceereignissen als Teil des Ereignisverlaufs in einem CloudTrail-Ereignis aufgezeichnet. Weitere Informationen zu CloudTrail-Ereignissen finden Sie unter Amazon SNS information in CloudTrail.
Hinweis: Eine Publish- oder PublishBatch-API-Anfrage wird für die Protokollierung als Ereignisse in CloudTrail nicht unterstützt.

Ermitteln der regionalen Kontingente

Auch wenn Sie die PublishBatch-API anstelle der Publish-API zum Senden der Nachrichten verwenden, können regionale Kontingente zu Drosselungen führen. Wenn Ihr regionales Kontingent beispielsweise 30.000 Nachrichten pro Sekunde beträgt, können Sie das Ratenlimit trotzdem auf folgende Weise überschreiten:

  • Sie haben die Aktion „Veröffentlichen“ mit einer Geschwindigkeit von 30.000 API-Anfragen pro Sekunde verwendet, um 30.000 Nachrichten zu veröffentlichen (eine Nachricht pro API-Anfrage).
  • Sie haben die PublishBatch-Aktion mit einer Geschwindigkeit von 3.000 API-Anfragen pro Sekunde verwendet, um 30.000 Nachrichten (10 Nachrichten pro Batch-API-Anfrage) zu veröffentlichen.
  • Sie haben die Aktion „Veröffentlichen“ mit einer Geschwindigkeit von 10.000 API-Anfragen pro Sekunde verwendet, um 10.000 Nachrichten zu veröffentlichen (eine Nachricht pro API-Anfrage). Sie haben auch die PublishBatch-Aktion mit einer Geschwindigkeit von 2.000 API-Anfragen pro Sekunde verwendet, um 20.000 Nachrichten (10 Nachrichten pro Batch-API-Anfrage) zu veröffentlichen. So haben Sie insgesamt 30.000 Nachrichten erstellt, die pro Sekunde veröffentlicht wurden.

Das Kontingent für Nachrichten pro Sekunde basiert auf der Anzahl der Nachrichten, die in einer Amazon-SNS-Region veröffentlicht werden, und kombiniert Publish- und PublishBatch-API-Anfragen. Weitere Informationen finden Sie unter Publish API throttling und Other API throttling in Amazon Simple Notification Service endpoints and quotas.

Bewährte Methoden zur Vermeidung von ThrottlingException-Fehlern

Zeitliches Verteilen der Intervalle der API-Aufrufe

Nutzen Sie bei der Verwendung von AWS-API-Endpunkten exponentielles Backoff und Wiederholungsversuche, um die Anzahl der API-Aufrufe zu verringern. Verwenden Sie den folgenden allgemeinen Beispiel-Pseudocode für exponentielle Backoffs und Wiederholungen:

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)
  }
}

Beantragen einer Erhöhung des Servicekontingents

Wenn Sie nach der Implementierung des exponentiellen Backoffs und der Wiederholungsversuche weiterhin ThrottlingException-Fehler erhalten, beantragen Sie eine Erhöhung des Servicekontingents für die API, die den Fehler verursacht. Geben Sie in der Beschreibung des Anwendungsfalls den Zeitraum an, in dem die Drosselung aufgetreten ist, und den Grund, warum Sie eine Erhöhung des Kontingents beantragen.

Das aktuelle Kontingent des SNS-Dienstes finden Sie auch im Service-Kontingent-Dashboard.
Hinweis: Vergewissern Sie sich, dass Sie die Erhöhung des Servicekontingents für Ihre AWS-Region beantragen.

Wichtig: Sie können Servicekontingenterhöhungen nur für Soft-Amazon-SNS-Kontingente beantragen. Sie können die harten Amazon-SNS-Kontingente nicht erhöhen. Weitere Informationen finden Sie unter Service quotas.

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 9 Monaten