Por que a contagem de tarefas em execução foi alterada no meu serviço do Amazon ECS?

Data da última atualização: 4/4/2022

A contagem de tarefas em execução no meu serviço Amazon Elastic Container Service (Amazon ECS) aumentou ou diminuiu.

Descrição breve

A contagem de tarefas em execução para o serviço do Amazon ECS pode aumentar ou diminuir devido a vários motivos. Algumas das causas comuns são as seguintes:

  • Suas tarefas do Amazon ECS estão falhando nas verificações de integridade.
  • O AWS CloudFormation ou o AWS Cloud Development Kit (AWS CDK) atualizou a contagem desejada no serviço do ECS.
  • Você atualizou manualmente a contagem desejada para o serviço do ECS.
  • A autoescalabilidade do serviço do Amazon ECS atualizou o número de tarefas com base na política de escalabilidade.
  • Você atualizou a contagem mínima ou máxima na autoescalabilidade da aplicação usando a API RegisterScalableTarget.
  • A configuração de implantação do serviço do ECS modificou a contagem de tarefas em execução durante a implantação.

Resolução

Suas tarefas do ECS estão falhando nas verificações de integridade

O CloudFormation ou o AWS CDK atualizou a contagem desejada no serviço do ECS

Se você criou o 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 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.

Para solucionar esse problema, analise os eventos do AWS CloudTrail para verificar se a chamada de API UpdateService foi feita pelo CloudFormation. Você pode verificar isso verificando se o campo UserAgent na seção Registro de evento especifica o seguinte:

"userAgent": "cloudformation.amazonaws.com"

Para resolver esse problema, remova o parâmetro DesiredCount do código CloudFormation ou CDK durante a atualização.

Você atualizou manualmente a contagem desejada para o serviço do ECS

Se você atualizou manualmente o serviço do ECS usando a API UpdateService, o console do Amazon ECS ou a AWS Command Line Interface (AWS CLI), atualize o serviço novamente para alterar a contagem desejada para um valor apropriado. Para obter mais informações, consulte Atualizando um serviço e serviço de atualização.

Para solucionar esse problema, analise os eventos do CloudTrail para verificar se a chamada de APIUpdateService foi feita a partir do console do Amazon ECS ou da AWS CLI. Você pode visualizar essas informações no campo UserAgent no registro do CloudTrail.

Exemplo:

"userAgent": "console.amazonaws.com"

A autoescalabilidade do serviço do Amazon ECS atualizou o número de tarefas com base na política de escalabilidade

A autoescalabilidade do serviço do Amazon ECS pode ter aumentado ou diminuído a contagem desejada com base na política de escalabilidade. Analise o serviço e verifique se há alguma ação de escalabilidade recente.

Para visualizar as atividades de escalabilidade, faça o seguinte:

  1. Abra o console do Amazon ECS.
  2. No painel de navegação, escolha Clusters.
  3. Escolha o cluster que você quer conferir.
  4. Escolha a guiaServices (Serviços).
  5. Escolha o serviço que você deseja verificar.
  6. Escolha a guia Events (Eventos).

Se houver um evento de escalabilidade, você poderá exibir mensagens informativas, como as seguintes, na colunaMessage (Mensagem):

Successfully set desired count to 1. Change successfully fulfilled by ecs. Cause: monitor alarm TargetTracking-service/service-autoscaling/sample-webapp-AlarmLow-fcd80aef-5161-4890-aeb4-35dde11ff42c in state ALARM triggered policy TargetTrackingPolicy.

Se as tarefas forem interrompidas devido a uma ação de escalabilidade, revise as políticas demonitoramento do objetivo ou escalabilidade de etapas. Em seguida, atualize a contagem desejada de acordo com os requisitos da sua aplicação.

Para visualizar a configuração de autoescalabilidade da aplicação, faça o seguinte:

  1. Abra o console do Amazon ECS.
  2. No painel de navegação, escolha Clusters.
  3. Escolha o cluster que você quer conferir.
  4. Escolha a guiaServices (Serviços).
  5. Escolha o serviço que você deseja verificar.
  6. Escolha a guia Auto Scaling (Autoescalabilidade).
    Observação: se você estiver usando o novo console do Amazon ECS, escolha Configuration and tasks (Configuração e tarefas) e, em seguida, visualize as informações em Service configuration (Configuração de serviço).

Você atualizou a contagem mínima e máxima na autoescalabilidade da aplicação usando a API RegisterScalableTarget

Se você usou a API RegisterScalableTarget para atualizar o destino escalável, verifique o valor da propriedade MinCapacity especificado na API. Se você especificou um novo valor mínimo, a autoescalabilidade da aplicação usará esse valor como o novo valor mínimo para o qual as tarefas podem ser reduzidas na escala vertical.

Observação: a autoescalabilidade da aplicação não reduz a contagem desejada para menos do que o valor mínimo especificado.

A configuração de implantação do serviço do ECS modificou a contagem de tarefas em execução durante a implantação

Analise os eventos do CloudTrail para verificar se a API UpdateService foi chamada recentemente. Você pode visualizar a configuração de implantação do seu serviço do ECS verificando o parâmetro de solicitaçãoDeploymentConfigration na API UpdateService.

-ou-

Analise a configuração de implantação do serviço do ECS no console do Amazon ECS fazendo o seguinte:

  1. Abra o console do Amazon ECS.
  2. No painel de navegação, escolha Clusters.
  3. Escolha o cluster que você quer conferir.
  4. Escolha a guiaServices (Serviços).
  5. Escolha o serviço que você deseja verificar.
  6. Escolha a guiaDeployments (Implantações).

Os parâmetros de configuração de implantação controlam quantas tarefas são executadas durante uma implantação e a sequência de tarefas de parada e início. Se a configuração de implantação for definida incorretamente, o número de tarefas em execução durante a implantação será reduzido. Portanto, é uma prática recomendada configurar o valor do parâmetroMinimumHealthyPercent para maior que 0%.

O parâmetroMinimumHealthyPercent representa o limite inferior em qualquer um dos itens a seguir como uma porcentagem do número desejado de tarefas para o serviço:

  • Número de tarefas que devem ser executadas para um serviço durante uma implantação
  • Número de tarefas que devem ser executadas quando uma instância de contêiner está diminuindo.

O valor desse parâmetro é arredondado para cima. Por exemplo, se MinimumHealthyPercent for 50% e o número desejado de tarefas for quatro, o programador poderá interromper duas tarefas existentes antes de iniciar duas novas tarefas. Se MinimumHealthyPercent for 75% e o número desejado de tarefas for dois, o programador não poderá interromper nenhuma tarefa devido ao valor resultante também ser dois.

O parâmetro MaximumPercent representa o limite superior em qualquer um dos itens a seguir como uma porcentagem do número desejado de tarefas para um serviço:

  • Número de tarefas que devem ser executadas para um serviço durante uma implantação
  • Número de tarefas que devem ser executadas quando uma instância de contêiner está diminuindo.

O valor desse parâmetro é arredondado para baixo. Por exemplo, se MaximumPercent for 200% e o número desejado de tarefas for quatro, o programador poderá iniciar quatro novas tarefas antes de interromper quatro tarefas existentes. Se MaximumPercent for 125% e o número desejado de tarefas for três, o programador não poderá iniciar nenhuma tarefa devido ao valor resultante também ser três.

Para obter mais informações, consulte Atualização contínua.