Come si risolvono gli errori "ThrottlingException" e "Rate exceeded" in Amazon SNS?

4 minuti di lettura
0

Voglio risolvere gli errori "ThrottlingException" e "Rate exceeded" in Amazon Simple Notification Service (Amazon SNS).

Breve descrizione

Le chiamate API di Amazon SNS non possono superare la frequenza massima consentita per ogni account e regione AWS. Se le richieste API superano questa quota di limitazione, ulteriori chiamate API verranno limitate e Amazon SNS restituirà l'errore ThrottlingException.

Esempi di messaggi di errore ThrottlingException di Amazon SNS:

  • "Si è verificato un errore (ThrottlingException) durante la chiamata dell'operazione Subscribe: Frequenza superata"
  • "Si è verificato un errore (ThrottlingException) durante la chiamata dell'operazione ListOriginationNumbers: Frequenza superata"
  • "Si è verificato un errore (ThrottlingException) durante la chiamata dell'operazione ListPhoneNumbersOptedOut: Frequenza superata"
  • "Si è verificato un errore (ThrottlingException) durante la chiamata dell'operazione Publish: Frequenza superata"
  • "Si è verificato un errore (ThrottlingException) durante la chiamata dell'operazione GetSMSAttributes: Frequenza superata"

Nota: Le chiamate API di Amazon SNS vengono limitate per migliorare le prestazioni del servizio. Per ulteriori informazioni sulle quote di limitazione delle API di Amazon SNS, consulta la sezione Amazon Simple Notification Service endpoints and quotas.

Risoluzione

Identifica l'API limitata

Identifica l'azione dell'API che causa l'errore

Quando il limite di frequenza supera il limite assegnato per una chiamata API, si riceve una risposta di errore. Controlla il messaggio di errore o lo stack di errori per identificare l'azione dell'API che viene limitata.

Usa i log di CloudTrail per controllare l'evento per la chiamata API

Amazon SNS è un servizio integrato con AWS CloudTrail. CloudTrail acquisisce le chiamate API per Amazon SNS come eventi. Questi eventi includono chiamate dalla console Amazon SNS e chiamate di codice alle operazioni API di Amazon SNS. Gli eventi supportati vengono registrati in un evento CloudTrail insieme ad altri eventi del servizio AWS come parte della cronologia degli eventi. Per ulteriori informazioni sugli eventi CloudTrail, consulta la sezione Amazon SNS information in CloudTrail.
Nota: Le richieste API Publish o PublishBatch non sono supportate per la registrazione come eventi in CloudTrail.

Esamina le quote regionali

Anche se utilizzi l'API PublishBatch anziché l'API Publish per inviare i messaggi, le quote regionali potrebbero causare limitazioni. Ad esempio, se la tua quota regionale è di 30.000 messaggi al secondo, puoi comunque superare il limite di frequenza nei modi seguenti:

  • Hai utilizzato l'azione Publish con una frequenza di 30.000 richieste API al secondo per pubblicare 30.000 messaggi (un messaggio per richiesta API).
  • Hai utilizzato l'azione PublishBatch con una frequenza di 3.000 richieste API al secondo per pubblicare 30.000 messaggi (10 messaggi per richiesta API batch).
  • Hai utilizzato l'azione Publish con una frequenza di 10.000 richieste API al secondo per pubblicare 10.000 messaggi (un messaggio per richiesta API). Hai anche utilizzato l'azione PublishBatch con una frequenza di 2.000 richieste API al secondo per pubblicare 20.000 messaggi (10 messaggi per richiesta API batch). Così facendo, hai creato un totale di 30.000 messaggi pubblicati al secondo.

La quota di messaggi al secondo si basa sul numero di messaggi pubblicati in una regione Amazon SNS e combina le richieste API Publish e PublishBatch. Per ulteriori informazioni consulta la sezione Publish API throttling e Other API throttling nella pagina Amazon Simple Notification Service endpoints and quotas.

Le migliori pratiche per prevenire gli errori ThrottlingException

Scagliona gli intervalli delle chiamate API

Quando usi gli endpoint delle API AWS, utilizza il backoff e i nuovi tentativi esponenziali per ridurre il numero di chiamate API effettuate. Utilizza il seguente pseudocodice illustrativo di alto livello per il backoff e i nuovi tentativi esponenziali:

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

Richiedi un aumento della quota di servizio

Se continui a ricevere errori ThrottlingException dopo aver implementato il backoff e i nuovi tentativi esponenziali, richiedi un aumento della quota di servizio per l'API che sta creando l'errore. Nella descrizione del caso d'uso, includi l'intervallo di tempo in cui si è verificata la limitazione e il motivo per cui richiedi un aumento della quota.

Puoi anche fare riferimento al Pannello di controllo delle quote di servizio per consultare la quota corrente del servizio SNS.
Nota: Assicurati di richiedere l'aumento della quota di servizio per la tua regione AWS.

Importante: Puoi richiedere l'aumento della quota di servizio solo per le quote Amazon SNS a limite flessibile. Non puoi aumentare le quote Amazon SNS a limite rigido. Per maggiori informazioni consulta la sezione Service quotas.

AWS UFFICIALE
AWS UFFICIALEAggiornata 9 mesi fa