

# Lidar com problemas de controle de utilização do Amazon ECS
<a name="operating-at-scale-dealing-with-throttles"></a>

Os erros de controle de utilização se enquadram em duas categorias principais: controle de utilização síncrono e controle de utilização assíncrono.

## Controle de utilização síncrono
<a name="synchronous-throttling"></a>

Quando ocorre o controle de utilização síncrono, você recebe imediatamente uma resposta de erro do Amazon ECS. Essa categoria costuma ocorrer quando você chama as APIs do Amazon ECS enquanto executa tarefas ou cria serviços. Para obter mais informações sobre o controle de utilização envolvido e os limites relevantes do controle de utilização, consulte [Request throttling for the Amazon ECS API](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/request-throttling.html).

Quando a aplicação inicia solicitações de API, por exemplo, usando a AWS CLI ou um AWS SDK, você pode corrigir o controle de utilização da API. Isso pode ser feito arquitetando a aplicação para lidar com os erros ou implementando uma estratégia de recuo exponencial e variação de sinal com lógica de repetição para as chamadas de API. Para obter mais informações, consulte [Tempos limite, novas tentativas e recuo com variação de sinal](https://aws.amazon.com/builders-library/timeouts-retries-and-backoff-with-jitter/).

Caso use um AWS SDK, a lógica de repetição automática está incorporada e é configurável.

## Controle de utilização assíncrono
<a name="asynchronous-throttling"></a>

O controle de utilização assíncrono ocorre devido a fluxos de trabalho assíncronos em que o Amazon ECS ou o CloudFormation podem estar chamando APIs em seu nome para provisionar recursos. É importante saber quais APIs da AWS o Amazon ECS invoca em seu nome. Por exemplo, a API `CreateNetworkInterface` é invocada em tarefas que usam o modo de rede `awsvpc`, e a API `DescribeTargetHealth` é invocada ao realizar verificações de integridade em tarefas registradas em um balanceador de carga.

Quando as workloads atingem uma escala considerável, o controle de utilização pode ser aplicado nessas operações de API. Ou seja, elas podem receber controle de utilização o suficiente para violar os limites impostos pelo Amazon ECS ou pelo AWS service (Serviço da AWS) que está sendo chamado. Por exemplo, se você implantar centenas de serviços, cada um com centenas de tarefas simultaneamente que usam o modo de rede `awsvpc`, o Amazon ECS invoca operações de API do Amazon EC2, como `CreateNetworkInterface`, e operações de API do Elastic Load Balancing, como `RegisterTarget` ou `DescribeTargetHealth`, para registrar a interface de rede elástica e o balanceador de carga, respectivamente. Essas chamadas de API podem exceder os limites da API, resultando em erros de controle de utilização. Veja a seguir um exemplo de erro de controle de utilização do Elastic Load Balancing incluído na mensagem de evento do serviço.

```
{
   "userIdentity":{
      "arn":"arn:aws:sts::111122223333:assumed-role/AWSServiceRoleForECS/ecs-service-scheduler",
      "eventTime":"2022-03-21T08:11:24Z",
      "eventSource":"elasticloadbalancing.amazonaws.com",
      "eventName":" DescribeTargetHealth ",
      "awsRegion":"us-east-1",
      "sourceIPAddress":"ecs.amazonaws.com",
      "userAgent":"ecs.amazonaws.com",
      "errorCode":"ThrottlingException",
      "errorMessage":"Rate exceeded",
      "eventID":"0aeb38fc-229b-4912-8b0d-2e8315193e9c"
   }
}
```

Quando essas chamadas de API compartilham limites com outros tráfegos de API na conta, pode ser difícil monitorá-las, mesmo que sejam emitidas como eventos de serviço.

## Monitorar o controle de utilização
<a name="monitoring-throttling"></a>

É importante identificar quais solicitações de API recebem controle de utilização e quem as emite. Você pode usar o AWS CloudTrail, que monitora o controle de utilização e se integra ao CloudWatch, Amazon Athena e Amazon EventBridge. É possível configurar o CloudTrail para enviar eventos específicos para o CloudWatch Logs. Os insights de log do CloudWatch Logs investigam e analisam os eventos. Isso identifica detalhes em eventos de controle de utilização, como o usuário ou o perfil do IAM que fez a chamada e o número de chamadas de API que foram feitas. Para obter mais informações, consulte [Monitoring CloudTrail log files with CloudWatch Logs](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html).

Para obter mais informações sobre o CloudWatch Logs Insights e instruções sobre como consultar arquivos de log, consulte [Analyzing log data with CloudWatch Logs Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html).

Com o Amazon Athena, você pode criar consultas e analisar dados usando o SQL padrão. Por exemplo, é possível criar uma tabela do Athena para analisar eventos do CloudTrail. Para obter mais informações, consulte [Using the CloudTrail console to create an Athena table for CloudTrail logs](https://docs.aws.amazon.com/athena/latest/ug/cloudtrail-logs.html#create-cloudtrail-table-ct).

Depois de criar uma tabela do Athena, você pode usar consultas SQL, como o exemplo a seguir, para investigar erros de `ThrottlingException`.

Substitua os valores das *user-input* pelos seus.

```
select eventname, errorcode,eventsource,awsregion, useragent,COUNT(*) count
FROM cloudtrail_table-name
where errorcode = 'ThrottlingException'
AND eventtime between '2024-09-24T00:00:08Z' and '2024-09-23T23:15:08Z'
group by errorcode, awsregion, eventsource, useragent, eventname
order by count desc;
```

O Amazon ECS também emite notificações de eventos para o Amazon EventBridge. Há eventos de mudança de estado do recurso e eventos de ação do serviço. Eles incluem eventos de controle de utilização de API, como `ECS_OPERATION_THROTTLED` e `SERVICE_DISCOVERY_OPERATION_THROTTLED`. Para obter mais informações, consulte [Eventos de ação do serviço do Amazon ECS](ecs_service_events.md).

Esses eventos podem ser consumidos por um serviço, como o AWS Lambda, para realizar ações em resposta. Para obter mais informações, consulte [Processo de eventos do Amazon ECS](ecs_cwet_handling.md). 

Se você executar tarefas autônomas, algumas operações de API, como `RunTask`, serão assíncronas, e as operações de repetição não serão executadas automaticamente. Nesses casos, você pode usar serviços, como o AWS Step Functions, com a integração do EventBridge para repetir operações de controle de utilização ou com falha. Para obter mais informações, consulte [Manage a container task (Amazon ECS, Amazon SNS)](https://docs.aws.amazon.com/step-functions/latest/dg/sample-project-container-task-notification.html).

## Usar o CloudWatch para monitorar controle de utilização
<a name="monitoring-throttling-cw"></a>

O CloudWatch oferece monitoramento de uso da API no namespace `Usage` em **Por recurso da AWS**. Essas métricas são registradas em log com o tipo **API** e o nome da métrica **CallCount**. Você pode criar alarmes para iniciar sempre que essas métricas atingirem um determinado limite. Para obter mais informações, consulte [Visualizar as Service Quotas e definir alarmes](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Quotas-Visualize-Alarms.html).

O CloudWatch também oferece detecção de anomalias. Esse recurso usa machine learning para analisar e estabelecer linhas de base de acordo com o comportamento específico da métrica na qual você o habilitou. Se houver uma atividade incomum na API, você poderá usar esse recurso com os alarmes do CloudWatch. Para obter mais informações, consulte [Usar a detecção de anomalias do CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Anomaly_Detection.html).

Ao monitorar proativamente os erros de controle de utilização, você pode entrar em contato com o Suporte para aumentar os limites relevantes de controle de utilização e receber orientação para as necessidades exclusivas da sua aplicação.