Como o disjuntor de implantação do Amazon ECS realiza a detecção de falhas - Amazon Elastic Container Service

Como o disjuntor de implantação do Amazon ECS realiza a detecção de falhas

O disjuntor de implantação é o mecanismo de atualização contínua que determina se as tarefas atingem um estado estacionário. O disjuntor de implantação tem uma opção que reverterá automaticamente uma implantação com falha para a implantação que estiver no estado COMPLETED.

Quando uma implantação de serviço muda de estado, o Amazon ECS envia um evento de alteração de estado de implantação de serviço para o EventBridge. Isso fornece uma maneira programática de monitorar o status das implantações de serviço. Para ter mais informações, consulte Eventos de alteração no estado da implantação do serviço do Amazon ECS. Recomendamos que você crie e monitore uma regra do EventBridge com um eventName de SERVICE_DEPLOYMENT_FAILED para que você possa realizar uma ação manual para iniciar sua implantação. Para obter mais informações, consulte Criar uma regra para o EventBridge no Guia do usuário do Amazon EventBridge.

Quando o disjuntor de implantação determina que uma implantação falhou, ele procura a implantação mais recente que estiver em um estado COMPLETED. Essa será a implantação que ele usará como implantação de reversão. Quando a reversão começa, a implantação muda de COMPLETED para IN_PROGRESS. Isso significa que a implantação não está qualificada para outra reversão até atingir o estado COMPLETED. Quando o disjuntor de implantação não encontra uma implantação que esteja em um estado COMPLETED, o disjuntor não inicia novas tarefas e a implantação é paralisada.

Ao criar um serviço, o programador acompanha as tarefas que falharam na execução em dois estágios.

  • Estágio 1: o programador monitora as tarefas para ver se elas mudam para o estado RUNNING.

    • Sucesso: a implantação tem uma chance de mudar para o estado COMPLETED porque há mais de uma tarefa que passou para o estado RUNNING. O critério de falha é ignorado e o disjuntor passa para o estágio 2.

    • Falha: há tarefas consecutivas que não mudaram para o estado RUNNING e a implantação pode passar para o estado FAILED.

  • Estágio 2: a implantação entra nesse estágio quando há pelo menos uma tarefa no estado RUNNING. O disjuntor analisa as verificações de integridade das tarefas na implantação atual que está sendo avaliada. As verificações de integridade validadas são Elastic Load Balancing, verificações de integridade de serviços do AWS Cloud Map e verificações de integridade de contêineres.

    • Sucesso: há pelo menos uma tarefa em execução com verificações de integridade concluídas.

    • Falha: as tarefas que foram substituídas devido a falhas na verificação de integridade atingiram o limite de falhas.

Considere o seguinte quando usar o método do disjuntor de implantação em um serviço. O EventBridge gera a regra.

  • A resposta DescribeServices fornece um insight sobre o estado de uma implantação, o rolloutState e o rolloutStateReason. Quando uma nova implantação é iniciada, a implantação começa no estado IN_PROGRESS. Quando o serviço atinge um estado estacionário, o estado da implantação passa a ser COMPLETED. Se o serviço não conseguir alcançar um estado estacionário e o disjuntor estiver ativado, a implantação passará para o estado FAILED. Uma implantação em um estado FAILED não iniciará qualquer nova tarefa.

  • Além dos eventos de alteração de estado de implantação do serviço que o Amazon ECS envia para implantações que foram iniciadas e concluídas, o Amazon ECS também envia um evento quando uma implantação com disjuntor ativado apresenta falha. Esses eventos fornecem detalhes sobre o motivo da falha de uma implantação ou se uma implantação foi iniciada devido a uma reversão. Para ter mais informações, consulte Eventos de alteração no estado da implantação do serviço do Amazon ECS.

  • Se uma nova implantação for iniciada porque uma implantação anterior apresentou falha e a reversão ocorreu, o campo reason do evento de alteração de estado de implantação do serviço indicará que a implantação foi iniciada devido a uma reversão.

  • O disjuntor de implantação só é compatível com serviços do Amazon ECS que usam o controlador de implantação de atualização contínua (ECS).

  • É necessário usar o console do Amazon ECS ou a AWS CLI quando utilizar o disjuntor de implantação com a opção CloudWatch. Para obter mais informações, consulte Criar um serviço usando parâmetros definidos e create-service na Referência da AWS Command Line Interface.

Os seguinte exemplo de create-service da AWS CLI mostra como criar um serviço do Linux quando o disjuntor de implantação é usado com reversão.

aws ecs create-service \ --service-name MyService \ --deployment-controller type=ECS \ --desired-count 3 \ --deployment-configuration "deploymentCircuitBreaker={enable=true,rollback=true}" \ --task-definition sample-fargate:1 \ --launch-type FARGATE \ --platform-family LINUX \ --platform-version 1.4.0 \ --network-configuration "awsvpcConfiguration={subnets=[subnet-12344321],securityGroups=[sg-12344321],assignPublicIp=ENABLED}"

Exemplo:

A implantação 1 está em um estado COMPLETED.

A implantação 2 não pode ser iniciada, então o disjuntor reverte para a implantação 1. A implantação 1 faz a transição para o estado IN_PROGRESS.

A implantação 3 é iniciada e não há nenhuma implantação no estado COMPLETED, portanto, a implantação 3 não pode reverter ou iniciar tarefas.

Limite de falha

O disjuntor de implantação calcula o valor limite e, em seguida, usa o valor para determinar quando mover a implantação para um estado FAILED.

O disjuntor de implantação tem um limite mínimo de 3 e um limite máximo de 200, e usa os valores na fórmula a seguir para determinar a falha de implantação.

Minimum threshold <= 0.5 * desired task count => maximum threshold

Quando o resultado do cálculo for maior que o mínimo de 3, mas menor que o máximo de 200, o limite de falha é definido como o limite calculado (arredondado para cima).

nota

Você não pode alterar nenhum dos valores de limite.

Há dois estágios para a verificação do status da implantação.

  1. O disjuntor de implantação monitora as tarefas que fazem parte da implantação e verifica se há tarefas que estão no estado RUNNING. O programador ignora os critérios de falha quando uma tarefa na implantação atual está no estado RUNNING e prossegue para o próximo estágio. Quando as tarefas não conseguem alcançar no estado RUNNING, o disjuntor de implantação aumenta a contagem de falhas em um. Quando a contagem de falhas é igual ao limite, a implantação é marcada como FAILED.

  2. Esse estágio inicia quando há uma ou mais tarefas no estado RUNNING. O disjuntor de implantação executa verificações de integridade nos seguintes recursos para as tarefas na implantação atual:

    • Load balancers Elastic Load Balancing

    • Serviço da AWS Cloud Map

    • Verificações de integridade do contêiner do Amazon ECS

    Quando uma verificação de integridade falha para a tarefa, o disjuntor de implantação aumenta a contagem de falhas em um. Quando a contagem de falhas é igual ao limite, a implantação é marcada como FAILED.

A tabela a seguir oferece alguns exemplos.

Contagem de tarefas desejada Cálculo Limite

1

3 <= 0.5 * 1 => 200
3 (o valor calculado é menor que o mínimo)

25

3 <= 0.5 * 25 => 200
13 (o valor é arredondado para cima)

400

3 <= 0.5 * 400 => 200
200

800

3 <= 0.5 * 800 => 200
200 (o valor calculado é maior do que o máximo)

Por exemplo, quando o limite é 3, o disjuntor começa com a contagem de falhas definida em 0. Quando uma tarefa não atinge o estado RUNNING, o disjuntor de implantação aumenta a contagem de falhas em um. Quando a contagem de falhas é igual a 3, a implantação é marcada como FAILED.

Para obter exemplos adicionais sobre como usar a opção de reversão, consulte Announcing Amazon ECS deployment circuit breaker (Anunciar o disjuntor de implantação do Amazon ECS).