Serviços do Amazon ECS - Serviço Amazon Elastic Container

Serviços do Amazon ECS

Você pode usar um serviço do Amazon ECS para executar e manter simultaneamente um número especificado de instâncias de uma definição de tarefa em um cluster do Amazon ECS. Se uma das suas tarefas falhar ou for interrompida, o programador de serviços do Amazon ECS executará outra instância da sua definição de tarefa para substituí-la. Isso ajuda a manter o número desejado de tarefas no serviço.

Você também pode executar o serviço atrás de um balanceador de carga. O load balancer distribui o tráfego entre as tarefas associadas ao serviço.

Conceitos do programador de serviços

Recomendamos usar o programador de serviços para serviços e aplicações sem estado de longa execução. O programador de serviços garante que a estratégia de programação que você especifica seja seguida e reprograma as tarefas em caso de falha. Por exemplo, se a infraestrutura subjacente apresentar falha, o programador de serviços reprogramará uma tarefa. Você pode usar estratégias e restrições de posicionamento de tarefas para personalizar como o programador posiciona e finaliza tarefas. Se uma tarefa em um serviço é interrompida, o programador inicia uma tarefa nova para substituí-la. Esse processo continua até que o serviço atinja o número desejado de tarefas com base na estratégia de programação usada pelo serviço. A estratégia de programação do serviço também é chamada de tipo de serviço.

O programador de serviços inclui uma lógica que regula a frequência com que as tarefas são reiniciadas, caso elas falhem repetidamente ao tentar iniciar. Se uma tarefa for interrompida sem ter entrado em um estado RUNNING, o programador de serviços começará a retardar as tentativas de inicialização e enviará uma mensagem de evento de serviço. Esse comportamento impede que recursos desnecessários sejam usados para tarefas com falha antes que você possa resolver o problema. Depois que o serviço for atualizado, o programador de serviços continuará com seu comportamento de programação normal. Para obter mais informações, consulte Lógica de controle de utilização de serviço e Mensagens de evento de serviço.

Há duas estratégias de programador de serviços disponíveis:

  • REPLICA: a estratégia de programação de réplica coloca e mantém o número desejado de tarefas no seu cluster. Por padrão, o programador de serviço distribui tarefas por zonas de disponibilidade. Você pode usar estratégias e limitações de posicionamento de tarefas para personalizar decisões de posicionamento de tarefa. Para mais informações, consulte Réplica.

  • DAEMON: a estratégia de programação do daemon implanta exatamente uma tarefa em cada instância de contêiner ativa que atenda a todas as restrições de posicionamento de tarefas que você especifica no seu cluster. O programador de serviço avalia as restrições de posicionamento de tarefas para executar tarefas e interromperá as que não atenderem às restrições de posicionamento. Ao usar essa estratégia, não há necessidade de especificar um número desejado de tarefas, uma estratégia de posicionamento de tarefas ou usar políticas de Auto Scaling do serviço. Para obter mais informações, consulte Daemon.

    nota

    As tarefas do Fargate não são compatíveis com a estratégia de programação do DAEMON.

Daemon

A estratégia de agendamento do daemon implanta exatamente uma tarefa em cada instância de contêiner ativa que atende a todas as restrições de posicionamento de tarefas especificado no seu cluster. O programador de serviço também avalia as restrições de posicionamento de tarefas para executar tarefas e interrompe as que não atenderem às restrições de posicionamento. Ao usar essa estratégia, não há necessidade de especificar um número desejado de tarefas, uma estratégia de posicionamento de tarefas ou usar políticas de Auto Scaling do serviço.

O Amazon ECS reserva recursos de computação de instância de contêiner, incluindo CPU, memória e interfaces de rede para as tarefas do daemon. Quando você inicia um serviço do daemon em um cluster com outros serviços de réplica, o Amazon ECS prioriza a tarefa do daemon. Isso significa que a tarefa do daemon é a primeira a ser iniciada nas instâncias e a última a ser interrompida. Essa estratégia garante que os recursos não sejam usados por tarefas de réplica pendentes e estejam disponíveis para as tarefas do daemon.

O programador de serviço do daemon não posiciona quaisquer tarefas em instâncias que possuem status DRAINING. Se uma instância de contêiner fizer a transição para o status DRAINING, as tarefas de daemon nela contidas serão interrompidas. O programador de serviço também monitora quando novas instâncias de contêiner são adicionadas ao seu cluster e adiciona as tarefas de daemon a elas.

Se uma configuração de implantação é especificada, o parâmetro de percentual máximo deve ser 100. O valor padrão para um serviço daemon de maximumPercent é 100%. O valor padrão para um serviço do daemon de minimumHealthyPercent é 0%.

Você precisará reiniciar o serviço quando alterar as restrições de posicionamento do serviço do daemon. O Amazon ECS atualiza dinamicamente os recursos reservados em instâncias qualificadas para a tarefa do daemon. Para instâncias existentes, o programador tenta posicionar a tarefa na instância.

Uma nova implantação será iniciada quando houver uma alteração no tamanho da tarefa ou na reserva de recursos do contêiner na definição de tarefa. O Amazon ECS pega as reservas de CPU e memória atualizadas para o daemon e, em seguida, bloqueia esta capacidade para a tarefa do daemon.

Se não houver recursos suficientes para qualquer um dos casos acima, ocorrerá o seguinte:

  • O posicionamento da tarefa apresentará falha.

  • Será gerado um evento do CloudWatch.

  • O Amazon ECS continuará tentando programar a tarefa na instância, aguardando a disponibilização dos recursos.

  • O Amazon ECS liberará todas as instâncias reservadas que não atendam mais aos critérios de restrição de posicionamento e interromperá as tarefas correspondentes do daemon.

A estratégia de programação do daemon pode ser usada nos seguintes casos:

  • Execução de containers de aplicações

  • Execução de contêineres de suporte para tarefas de registro, monitoramento e rastreamento

As tarefas que usam o tipo de execução do Fargate ou os tipos de controlador de implantação CODE_DEPLOY ou EXTERNAL não são compatíveis com a estratégia de programação do daemon.

nota

O programador de serviço do daemon não aceita o uso de Classic Load Balancers.

Quando o programador de serviços parar de executar tarefas, ele tentará manter o equilíbrio entre as zonas de disponibilidade do cluster. O programador usa a seguinte lógica:

  • Se houver uma estratégia de posicionamento definida, use essa estratégia para selecionar quais tarefas devem ser encerradas. Por exemplo, se um serviço tiver uma estratégia de distribuição de zona de disponibilidade definida, será selecionada uma tarefa que deixa as tarefas restantes com a melhor distribuição.

  • Se não houver nenhuma estratégia de posicionamento definida, uso a lógica a seguir para manter o equilíbrio em seu cluster entre as zonas de disponibilidade:

    • Ordene as instâncias de contêiner válidas. Dê prioridade a instâncias que têm o maior número de tarefas em execução nesse serviço na respectiva zona de disponibilidade. Por exemplo, se a zona A tiver uma tarefa de serviço em execução e as zonas B e C tiverem duas, as instâncias de contêiner nas zonas B ou C serão consideradas ideais para encerramento.

    • Interrompa a tarefa em uma instância de contêiner de uma zona de disponibilidade ideal de acordo com as etapas anteriores. Favoreça instâncias de contêiner com o maior número de tarefas em execução para esse serviço.

Réplica

A estratégia de programação de réplica posiciona e mantém o número desejado de tarefas no seu cluster.

Para um serviço que executa tarefas no Fargate, quando o programador de serviços iniciar novas tarefas ou interromper tarefas em execução, ele tentará manter o equilíbrio entre as zonas de disponibilidade. Não há necessidade de especificar estratégias ou restrições de posicionamento de tarefas.

Ao criar um serviço que executa tarefas em instâncias do EC2, você pode opcionalmente especificar estratégias e restrições de posicionamento de tarefas para personalizar decisões de posicionamento de tarefas. Se nenhuma estratégia ou restrições de posicionamento de tarefas for especificada, por padrão, o programador do serviço distribuirá as tarefas entre zonas de disponibilidade. O programador de serviço usa a seguinte lógica:

  • Determina quais instâncias de contêiner no cluster podem oferecer suporte à definição de tarefa de serviço (por exemplo, elas têm atributos necessários de CPU, memória, portas e de instância de contêiner).

  • Determina quais instâncias de contêiner atendem a qualquer restrição de posicionamento definida para o serviço.

  • Se houver uma estratégia de posicionamento definida, use-a para selecionar uma instância entre os candidatos restantes.

  • Se não houver uma estratégia de posicionamento definida, equilibre as tarefas em seu cluster entre as zonas de disponibilidade com a seguinte lógica:

    • Ordena as instâncias de contêiner válidas. Dá prioridade a instâncias que têm o menor número de tarefas em execução nesse serviço na respectiva zona de disponibilidade. Por exemplo, se a zona A tiver uma tarefa de serviço em execução e as zonas B e C tiverem nenhuma, as instâncias de contêiner válidas nas zonas B ou C serão consideradas ideais para a colocação.

    • Coloca a nova tarefa de serviço em uma instância de contêiner válida de uma zona de disponibilidade ideal de acordo com as etapas anteriores. Favorece instâncias de contêiner com o menor número de tarefas em execução para esse serviço.

Conceitos de serviços adicionais

  • Você também pode executar o serviço por trás de um load balancer. Para mais informações, consulte Balanceamento de carga do serviço.

  • É possível especificar uma configuração de implantação para seu serviço. Uma implantação é acionada ao ser atualizada a definição de tarefa ou a contagem desejada de um serviço. Durante uma implantação, o programador de serviço usa os parâmetros de porcentagem mínima de integridade e de porcentagem máxima para determinar a estratégia de implantação. Para mais informações, consulte Parâmetros de definição de serviço.

  • O serviço pode ser opcionalmente configurado para usar a descoberta de serviço do Amazon ECS. A descoberta de serviços usa as APIs de nomeação automática do AWS Cloud Map para gerenciar entradas de DNS para as tarefas do seu serviço. Isso as torna detectáveis dentro da sua VPC. Para mais informações, consulte Descoberta de serviço.

  • Ao excluir um serviço, se ainda houver tarefas em execução que exijam limpeza, o status do serviço mudará de ACTIVE para DRAINING, e não será possível visualizar o serviço no console ou na operação da API ListServices. Depois que todas as tarefas tiverem feito a transição para um status STOPPING ou STOPPED, o serviço mudará do status DRAINING para INACTIVE. Você pode visualizar os serviços no status DRAINING ou INACTIVE usando a operação da API DescribeServices. No entanto, no futuro, os serviços INACTIVE poderão ser limpos e removidos da manutenção de registros do Amazon ECS e as chamadas DescribeServices nesses serviços retornarão um erro ServiceNotFoundException.