Lidar com problemas de controle de utilização do Amazon ECS - Amazon Elastic Container Service

Lidar com problemas de controle de utilização do Amazon ECS

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

Quando ocorre o controle de utilização síncrono, você recebe imediatamente uma resposta de erro do Amazon ECS. Essa categoria de controle de utilização costuma ocorrer ao chamar 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.

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.

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

Controle de utilização assíncrono no Amazon ECS

O controle de utilização assíncrono ocorre devido a fluxos de trabalho assíncronos em que o Amazon ECS ou o AWS 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

É 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.

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.

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.

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

select eventname, errorcode,eventsource,awsregion, useragent,COUNT(*) count FROM cloudtrail-table-name where errorcode = 'ThrottlingException' AND eventtime between '2022-01-14T03:00:08Z' and '2022-01-23T07:15:08Z' group by errorcode, awsregion, eventsource, username, 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 ter mais informações, consulte Eventos de ação do serviço do Amazon ECS.

Esses eventos podem ser consumidos por um serviço, como o AWS Lambda, para realizar ações em resposta. Para ter mais informações, consulte Processo de eventos do Amazon ECS.

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

Usar o CloudWatch para monitorar controle de utilização

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.

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.

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