Serviços do Amazon ECS - Amazon Elastic Container Service

Serviços do Amazon ECS

Um serviço do Amazon ECS permite executar e manter simultaneamente um número especificado de instâncias de uma definição de tarefa em um cluster do Amazon ECS. Se qualquer uma das tarefas apresentar falha ou for interrompida por qualquer motivo, o programador de serviço do Amazon ECS iniciará outra instância da sua definição de tarefa para substitui-la a fim de manter o número desejado de tarefas no serviço.

Além de manter o número desejado de tarefas no serviço, outra opção é executar o serviço por meio de um load balancer. O load balancer distribui o tráfego entre as tarefas associadas ao serviço.

Conceitos do programador de serviços

O programador de serviço é ideal para serviços e aplicativos sem estado em execução por muito tempo. O programador de serviços garante que a estratégia de agendamento que você especifica seja seguida e as reprograma quando uma falha (por exemplo, caso a infraestrutura subjacente falhe por algum motivo). Podem ser usadas estratégias e limitações de posicionamento de tarefas para personalizar como o programador posiciona e finaliza as 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 de tarefas em execução desejado com base na estratégia de programação (também referida como o tipo de serviço) que o serviço usa.

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 passado para um estado de RUNNING, o que é determinado por um time stamp startedAt na tarefa, o programador de serviços começa diminuir aos poucos as tentativas de inicialização e emite uma mensagem de evento de serviço. Esse comportamento impede a utilização de recursos desnecessários para tarefas com falha, dando a você uma oportunidade para resolver o problema. Depois que o serviço for atualizado, o programador de serviços continuará com seu comportamento 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 obter mais informações, consulte . Replica.

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

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 para ser a primeira tarefa a ser iniciada nas instâncias e a última tarefa 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 transformar DRAINING, as tarefas daemon nela sã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%.

Uma alteração nas restrições de posicionamento para o serviço do daemon requer uma reinicialização de serviço para que as alterações entrem em vigor. 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 alteração no tamanho da tarefa ou na reserva de recurso de contêiner na definição de tarefa inicia uma implantação do serviço. 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çp do daemon não é compatível com o uso de balanceadores de carga clássicos.

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, então será selecionada uma tarefa que deixa as tarefas restantes com a melhor distribuição.

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

    • Classifique instâncias de contêiner válidas, dando prioridade a instâncias que têm maior número de tarefas em execução neste 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 o encerramento.

    • Interrompa a tarefa em uma instância de contêiner em zona de disponibilidade ideal (com base nas etapas anteriores), favorecendo instâncias de contêiner com o número maior de tarefas em execução neste serviço.

Replica

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

Ao ser criado um serviço que executa tarefas no Fargate, quando o programador do serviço iniciar novas tarefas ou interromper a execução de tarefas, 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 as zonas de disponibilidade. O programador de serviço usa a seguinte lógica:

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

  • Determine 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 essa estratégia 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:

    • Classifique instâncias de contêiner válidas, dando prioridade a instâncias que têm menor número de tarefas em execução neste 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.

    • Coloque a nova tarefa de serviço em uma instância de contêiner válida em uma zona de disponibilidade ideal (com base nas etapas anteriores), favorecendo as instâncias de contêiner com o menor número de tarefas em execução neste serviço.

Conceitos de serviços adicionais

  • Você também pode executar o serviço por trás de um load balancer. Para obter 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 obter 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ço usa APIs de nomeação automática do Amazon Route 53 para gerenciar entradas de DNS para as tarefas do serviço, tornando-as detectáveis na VPC. Para obter 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 de API ListServices. Depois que todas as tarefas tiverem passado para o status STOPPING ou STOPPED, o status do serviço mudará de DRAINING para INACTIVE. Serviços no status DRAINING ou INACTIVE ainda poderão ser visualizados com a operação de 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.