Como soluciono os erros de "ThrottlingException" e "Taxa excedida" no Amazon SNS?

5 minuto de leitura
0

Quero solucionar os erros "ThrottlingException" e "Taxa excedida" no Amazon Simple Notification Service (Amazon SNS).

Breve descrição

As chamadas de API do Amazon SNS não podem exceder a taxa máxima permitida de solicitação de API para cada conta e região da AWS. Se as solicitações de API excederem essa cota de controle de utilização da API, outras chamadas de API serão controladas, e o Amazon SNS retornará um erro de ThrottlingException.

Exemplos de mensagens de erro de ThrottlingException do Amazon SNS:

  • "Ocorreu um erro (ThrottlingException) ao chamar a operação Assinar: Taxa excedida"
  • "Ocorreu um erro (ThrottlingException) ao chamar a operação ListOriginationNumbers: Taxa excedida"
  • "Ocorreu um erro (ThrottlingException) ao chamar a operação ListPhoneNumbersOptedOut: Taxa excedida"
  • "Ocorreu um erro (ThrottlingException) ao chamar a operação de publicação: Taxa excedida"
  • "Ocorreu um erro (ThrottlingException) ao chamar a operação GetSMSAttributes: Taxa excedida"

Observação: as chamadas de API do Amazon SNS são controladas para melhorar o desempenho do serviço. Para obter mais informações sobre as cotas de controle de utilização da API do Amazon SNS, consulte Endpoints e cotas do Amazon Simple Notification Service.

Resolução

Identificar a API com controle de utilização

Identificar a ação da API que está causando o erro

Quando o limite de taxa excede o limite alocado para uma chamada de API, você recebe uma resposta de erro. Verifique a mensagem de erro ou a pilha de erros para identificar a ação da API que está recebendo controle de utilização.

**Usar logs do CloudTrail para verificar o evento da chamada de API **

O Amazon SNS é integrado ao AWS CloudTrail. O CloudTrail captura chamadas de API para o Amazon SNS como eventos. Esses eventos incluem chamadas do console do Amazon SNS e chamadas de código para as operações de API do Amazon SNS. Os eventos com suporte são registrados em um evento do CloudTrail, junto com outros eventos de serviços da AWS, como parte do histórico de eventos. Para obter mais informações sobre eventos do CloudTrail, consulte Informações do Amazon SNS no CloudTrail.
Observação: não há suporte para uma solicitação da API Publish ou PublishBatch para registro em log como eventos no CloudTrail.

Examinar as cotas regionais

Mesmo se você usar a API PublishBatch em vez da API Publish para enviar as mensagens, as cotas regionais poderão causar controle de utilização. Por exemplo, a se sua cota regional for de 30.000 mensagens por segundo, você ainda poderá exceder o limite de taxa das seguintes maneiras:

  • Você usou a ação Publish a uma taxa de 30.000 solicitações de API por segundo para publicar 30.000 mensagens (uma mensagem por solicitação de API).
  • Você usou a ação PublishBatch a uma taxa de 3.000 solicitações de API por segundo para publicar 30.000 mensagens (10 mensagens por solicitação de API em lote).
  • Você usou a ação Publish a uma taxa de 10.000 solicitações de API por segundo para publicar 10.000 mensagens (uma mensagem por solicitação de API). Você também usou a ação PublishBatch a uma taxa de 2.000 solicitações de API por segundo para publicar 20.000 mensagens (10 mensagens por solicitação de API em lote). E, ao fazer isso, você criou um total de 30.000 mensagens publicadas por segundo.

A cota de mensagens por segundo se baseia no número de mensagens publicadas em uma região do Amazon SNS e combina solicitações das API Publish e PublishBatch. Para obter mais informações, consulte Controle de utilização da API Publish e Controle de utilização de outra API em Endpoints e cotas do Amazon Simple Notification Service.

Práticas recomendadas para evitar erros de ThrottlingException

Escalonar os intervalos das chamadas de API

Ao usar endpoints de API da AWS, use recuo exponencial e novas tentativas para diminuir o número de chamadas de API feitas. Use o seguinte exemplo de pseudocódigo de alto nível para recuo exponencial e novas tentativas:

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

Solicitar o aumento da cota de serviço

Se você continuar recebendo erros de ThrottlingException depois de implementar recuo exponencial e novas tentativas, solicite um aumento da cota de serviço para a API que está criando o erro. Na descrição do caso de uso, inclua o período em que o controle de utilização ocorreu e o motivo pelo qual você está solicitando um aumento de cota.

Você também pode consultar o Painel de cotas de serviços para ver a cota atual de serviço do SNS.
Observação: certifique-se de solicitar o aumento da cota de serviço para sua região da AWS.

Importante: você pode solicitar aumentos de cota de serviços somente para cotas de limites flexíveis do Amazon SNS. Não é possível aumentar cotas de limite fixo do Amazon SNS. Para obter mais informações, consulte Service Quotas.

AWS OFICIAL
AWS OFICIALAtualizada há 9 meses