Como soluciono problemas de autoescalabilidade do serviço no Amazon ECS?

8 minuto de leitura
0

A autoescalabilidade do serviço configurada para meu Amazon Elastic Container Service (Amazon ECS) não está aumentando ou reduzindo a escala da contagem de tarefas desejada conforme solicitado.

Breve descrição

Você pode atualizar automaticamente a contagem desejada de tarefas para o serviço do Amazon ECS integrando o serviço do ECS ao serviço Application Auto Scaling e aos alarmes do Amazon CloudWatch.

A autoescalabilidade de serviço pode não ser capaz de adicionar ou remover tarefas conforme o esperado devido a um ou mais dos seguintes motivos:

  • As políticas de escalabilidade não estão configuradas corretamente.
  • O alarme do CloudWatch que aciona as políticas de escalabilidade foi excluído ou editado.
  • O formato da expressão cron está especificado incorretamente na ação agendada.
  • Você atualizou a contagem de tarefas desejada manualmente ou por meio do AWS CloudFormation ou do AWS Cloud Development Kit (AWS CDK) para um valor menor que o mínimo ou maior que o valor máximo definido na autoescalabilidade dos serviços.
  • Seu cluster do ECS não tem recursos ou capacidade suficientes para executar novas tarefas.

Resolução

Solução de problemas de alarmes e políticas de escalabilidade do CloudWatch

Destino escalável

  • Certifique-se de que o serviço do ECS esteja registrado como um destino escalável com o Application Auto Scaling. Se o serviço não estiver registrado, registre-o usando o seguinte comando. Em seguida, configure as políticas de escalabilidade e os alarmes do CloudWatch adequadamente. Para obter mais informações, consulte Como configuro a autoescalabilidade do serviço do Amazon ECS no Fargate?
aws application-autoscaling register-scalable-target --service-namespace ecs --scalable-dimension ecs:service:DesiredCount \
--resource-id service/your-cluster/your-service-name --min-capacity 1 --max-capacity 10 --region example-region
  • Use os seguintes comandos para recuperar informações sobre a autoescalabilidade do serviço do ECS:
aws application-autoscaling describe-scalable-targets --service-namespace ecs --region example-region 
aws application-autoscaling describe-scaling-policies --service-namespace ecs --region example-region
aws application-autoscaling describe-scaling-activities --service-namespace ecs \ 
--scalable-dimension ecs:service:DesiredCount --resource-id service/your-cluster/your-service-name --region example-region
  • Ao criar ou atualizar os alarmes do CloudWatch para o autoescalabilidade do serviço do ECS, certifique-se de que as métricas, dimensões, estatísticas, período, condição e valores de limite estejam especificados corretamente. Caso contrário, o alarme não será acionado para atualizar a política de escalabilidade associada.

Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar utilizando a versão mais recente da AWS CLI.

Etapa de escalabilidade

  • Verifique se os alarmes do CloudWatch associados às políticas de escalabilidade estão sendo acionados. Verifique se houve algum erro ao visualizar o histórico de alarmes do CloudWatch.
  • Para políticas de escalabilidade de etapas, verifique se o limite de falhas, os ajustes de etapas e o tipo de ajuste de escalabilidade estão configurados no alarme do CloudWatch. Se não houver ajuste de etapa correspondente para o delta da falha, ou seja, limite subtraído do valor da métrica, você poderá ver a seguinte mensagem de erro no histórico de alarmes: Falha ao executar a ação de AutoScaling: Nenhum ajuste de etapa foi encontrado para o valor da métrica [xx, xx] e delta da violação xx
    Portanto, certifique-se de que todos os ajustes de etapa, que é de infinito negativo a 0 para a redução de escala na horizontal e 0 a infinito positivo para o aumento, sejam abrangidos em suas políticas.
    Observação: Normalmente, para uma política de expansão, nos ajustes da etapa, somente o limite superior pode ser nulo (infinito positivo). Para uma política de redução de escala, somente o limite inferior pode ser nulo (infinito negativo). Para obter mais informações, consulte Ajustes de etapa.

Escalabilidade de monitoramento do objetivo

  • Como as políticas de escalabilidade de monitoramento do objetivo são gerenciadas pela AWS, o Application Auto Scaling cria alarmes do CloudWatch para escalabilidade e expansão com base no valor ou limite do objetivo especificado durante a criação dessas políticas. Portanto, não edite ou exclua esses alarmes. Editar ou excluir esses alarmes afeta o comportamento da escalabilidade. Se você modificou ou excluiu esses alarmes, certifique-se de recriar a política de monitoramento do objetivo novamente.
  • Você pode ter várias políticas de escalabilidade de monitoramento do objetivo para um serviço do ECS, contanto que cada política use uma métrica diferente. A intenção do Application Auto Scaling é priorizar a disponibilidade. Portanto, o comportamento dessas políticas difere dependendo se as políticas de monitoramento do objetivo estão prontas para aumento ou redução da escala. O Application Auto Scaling aumenta a escala das tarefas na horizontal quando qualquer uma das políticas de monitoramento do objetivo está pronta para o aumento, mas reduz a escala na horizontal apenas quando todas as políticas de monitoramento do objetivo (com a parte de redução da escala na horizontal habilitada) estão prontas para a redução.
  • Quando várias políticas de escalabilidade, incluindo políticas de monitoramento do objetivo e escalonamento de etapas, estiverem configuradas para um serviço do ECS, certifique-se de que elas não entrem em conflito. Esses conflitos podem causar comportamentos indesejáveis, como redução e aumento consecutivos, resultando na oscilação desnecessária da contagem de tarefas.

Para obter mais informações, consulte asPolíticas de escalabilidade de monitoramento do objetivo para o Application Auto Scaling.

Solução de problemas de expressão cron incorreta

Certifique-se de que a expressão cron especificada no agendamento esteja correta na configuração das ações agendadas para o Application Auto Scaling. O formato cron compatível com o Application Auto Scaling consiste em seis campos separados por espaços em branco: [Minutos] [Horas] [Dia_do_mês] [Mês] [Dia_da_semana] [Ano].

Para obter mais informações, consulte Exemplo de ações agendadas para o Application Auto Scaling.

Solução de problemas da atualização da contagem de tarefas desejada

Lembre-se do seguinte ao atualizar manualmente ou usar o CloudFormation ou o AWS CDK para atualizar a contagem de tarefas desejada para o serviço do ECS:

  • Se você atualizou a contagem de tarefas desejada para o serviço do ECS para um valor abaixo do valor mínimo de capacidade e um alarme aciona uma atividade de expansão, a autoescalabilidade do serviço escala a contagem desejada até o valor mínimo de capacidade. Em seguida, a autoescalabilidade do serviço continua aumentando a escala na horizontal, conforme necessário, com base na política de escalabilidade associada ao alarme. No entanto, uma atividade de redução de escala na horizontal não ajusta a contagem desejada, porque a contagem desejada já está abaixo do valor mínimo da capacidade.
  • Se você atualizou a contagem de tarefas desejada para o serviço do ECS para um valor acima da capacidade máxima e um alarme aciona uma atividade de redução de escala na horizontal, a autoescalabilidade do serviço escala a contagem desejada para o valor máximo de capacidade. Em seguida, a autoescalabilidade do serviço continua a reduzir a escala na horizontal conforme necessário, com base na política de escalabilidade associada ao alarme. No entanto, uma atividade de expansão não ajusta a contagem desejada, porque a contagem desejada já está acima do valor máximo da capacidade.
  • Se você criou seu serviço do ECS com CloudFormation ou CDK sem especificar o campo DesiredCount, a contagem desejada será definida como um valor padrão de 1. No entanto, quando o mesmo serviço é atualizado por meio do CloudFormation ou CDK sem especificar o campo DesiredCount, a contagem desejada existente na implantação atual é usada para a nova implantação. Portanto, quando o valor de contagem desejado for especificado na pilha do CloudFormation ou na AWS CDK, certifique-se de que o valor esteja entre os valores mínimo e máximo durante a atualização do serviço.

Solução de problemas de capacidade do cluster

Quando o cluster do ECS não tem recursos suficientes, como instâncias de contêiner do Amazon Elastic Compute Cloud (Amazon EC2), para executar tarefas, a ação de escalabilidade iniciada pelas políticas de escalabilidade permanece não atendida. Nesse caso, uma mensagem de erro é registrada em eventos de serviço. Para evitar esses problemas de capacidade do Amazon EC2 e iniciar as tarefas com êxito, utilize os provedores de capacidade do Amazon ECS para provisionar instâncias do EC2 automaticamente, conforme necessário.

Observação: durante as ações de escalabilidade, a autoescalabilidade do serviço usa a contagem real de tarefas em execução em um serviço como ponto de partida, em oposição à contagem desejada. Isso evita a escalabilidade excessiva que pode não ser satisfeito, por exemplo, se não houver recursos de instância de contêiner suficientes para colocar as tarefas adicionais. Se a capacidade da instância de contêiner estiver disponível posteriormente, a ação de escalabilidade pendente poderá ser bem-sucedida. Em seguida, outras ações de escalabilidade continuam após o período de desaquecimento.


Informações relacionadas

autoescalabilidade de serviço

Referência de comando do AWS CLI para autoescalabilidade de aplicação

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos