Como uso os provedores de capacidade Fargate Spot para o Amazon ECS?

6 minuto de leitura
0

Quero usar os provedores de capacidade do AWS Fargate Spot para o Amazon Elastic Container Service (Amazon ECS).

Breve descrição

Antes de começar, lembre-se do seguinte:

  • Os provedores de capacidade Fargate e Fargate Spot não precisam ser criados. Eles estão disponíveis para todas as contas e só precisam estar associados a um cluster para estarem disponíveis para uso.
  • O provedor de capacidade Fargate Spot pode ser associado a um cluster existente usando a API do ECS PutClusterCapacityProviders e a referência de comando da CLI do ECS put-cluster-capacity-providers. A adição do provedor de capacidade Fargate Spot a um cluster existente não é suportada usando o Console de Gerenciamento da AWS.
  • Os provedores de capacidade Fargate e do Fargate Spot são reservados e não podem ser excluídos. Você pode desassociá-los de um cluster usando a API PutClusterCapacityProviders.
  • O Fargate Spot exige que sua tarefa use a versão 1.3.0 ou posterior da plataforma (para Linux) e o provedor de capacidade do Fargate Spot não é compatível com contêineres Windows no Fargate.

Resolução

Observação: Se você receber erros ao executar comandos da CLI da AWS, verifique se está utilizando a versão mais recente da CLI da AWS.

Crie, associe e desassocie o provedor de capacidade Fargate Spot do seu cluster

Os provedores de capacidade Fargate Spot são automaticamente associados ao cluster quando são criados a partir do console do Amazon ECS usando o modelo de cluster Somente rede. Para obter mais informações, consulte Criação de um cluster para o tipo de inicialização do Fargate usando o novo console.

**Associar o provedor de capacidade Fargate Spot ao seu cluster **

Se o provedor de capacidade Fargate Spot ainda não estiver associado, você poderá associá-lo ao seu cluster usando a API PutClusterCapacityProviders ou o seguinte comando da AWS CLI:

aws ecs put-cluster-capacity-providers \
        --cluster <Cluster_name> \
        --capacity-providers FARGATE FARGATE_SPOT \
        --default-capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \
        --region <Region>

Importante: Para evitar sobrescrever seus provedores de capacidade, inclua todos os provedores de capacidade existentes e a estratégia do provedor de capacidade no comando anterior. Os provedores de capacidade que não estão incluídos no comando são desassociados do cluster.

Dissociar o provedor de capacidade Fargate Spot do seu cluster

Todos os provedores de capacidade existentes associados ao cluster e omitidos de uma chamada da API PutClusterCapacityProviders serão desassociados com o cluster. Para desassociar o provedor de capacidade Fargate Spot do seu cluster do Amazon ECS, execute o seguinte comando da AWS CLI:

aws ecs put-cluster-capacity-providers \
        --cluster <Cluster_name> \
        --capacity-providers FARGATE \
        --default-capacity-provider-strategy capacityProvider=FARGATE,weight=1 \
        --region <Region>

Verifique se seu provedor de capacidade Fargate Spot está associado ao seu cluster do Amazon ECS

Para verificar se o provedor de capacidade Fargate Spot está associado ao seu cluster do Amazon ECS, execute o seguinte comando:

aws ecs describe-clusters \
        --cluster <Cluster_name> \
        --region <Region>

A saída é semelhante à seguinte:

Output:
      "capacityProviders": [
           "FARGATE",
           "FARGATE_SPOT"
      ]

Observação: A saída do comando anterior inclui a seção capacityProviders que contém os provedores de capacidade associados ao seu cluster do Amazon ECS.

Execute uma tarefa ou crie um serviço usando o provedor de capacidade Fargate Spot

Para executar uma tarefa usando um provedor de capacidade Fargate Spot, execute o seguinte comando:

aws ecs run-task \
        --cluster <Cluster_name> \
        --capacity-provider-strategy capacityProvider=FARGATE_SPOT,weight=1 \
        --task-definition <Task_definition_family>:<revision> \
        --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \
        --count <Number_of_Tasks> \
        --region <Region>

Para criar um serviço Amazon ECS que usa provedores de capacidade Fargate Spot, execute o seguinte comando:

aws ecs create-service \
        --cluster <Cluster_name> \
        --service-name <Service_name> \
        --capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \
        --task-definition <Task_defintition_family>:<revision> \
        --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \
        --desired-count <Number_of_tasks> \
        --region <Region>

Verifique se suas tarefas estão sendo executadas no provedor de capacidade Fargate Spot

Para confirmar que suas tarefas estão usando os provedores de capacidade Fargate, execute o seguinte comando:

aws ecs describe-tasks
        --cluster <Cluster_name> \
        --tasks <TaskID> \
        --region <Region>

O rastreamento do uso do Fargate OnDemand e do Fargate Spot por serviço a partir do Amazon CloudWatch não é suportado atualmente. No entanto, você pode ver a métrica do uso total do Fargate OnDemand e do Spot usando o CloudWatch. Para obter mais informações, consulte as métricas de uso do AWS Fargate.

Perguntas frequentes

Quais são algumas das melhores práticas do Fargate Spot?

  • O Fargate Spot é ótimo para workloads sem estado e tolerantes a falhas, mas não use apenas tarefas do Spot para workloads críticos. Em vez disso, configure uma combinação de tarefas regulares do Fargate.
  • Gerencie interrupções captando sinais SIGTERM. Ao receber um sinal SIGTERM, é recomendável definir StopTimeout para 120 segundos. Para obter mais informações, consulte Desligamentos normais com o ECS.
  • Os aplicativos executados no Fargate Spot devem ser tolerantes a falhas.

O que acontece com as tarefas quando a capacidade do FARGATE_SPOT não está disponível?

Quando o agendador do ECS não consegue iniciar uma tarefa devido a incapacidade, o evento SERVICE_TASK_PLACEMENT_FAILURE é emitido. A tarefa não chegará ao **PROVISIONAMENTO ** do primeiro estágio e um aviso não será exibido nos eventos do ECS. O agendador do ECS continuará tentando iniciar a tarefa. Se a capacidade ficar disponível, o evento SERVICE_STEADY_STATE será emitido.

Há um failover para o Fargate quando nenhuma capacidade do Fargate Spot está disponível?

Não é possível ter um mecanismo de failback para o FARGATE quando não há capacidade do FARGATE_SPOT disponível.

Qual é um exemplo de como as tarefas são realizadas ao usar os provedores de capacidade em um serviço do ECS?

Neste exemplo, há uma estratégia do provedor de capacidade que contém os dois provedores de capacidade a seguir:

Provider 1: FARGATE      |  Base:2   Weight:1
Provider 2: FARGATE_SPOT |  Base:0   Weight:3

De acordo com essa estratégia, depois que o valor base é satisfeito, para cada tarefa executada usando FARGATE, três tarefas usam o FARGATE_SPOT. Quando o serviço ECS é criado com a contagem desejada de 5, acontece o seguinte:

  • 2 tarefas são iniciadas usando o FARGATE para satisfazer o valor base e as 3 restantes são divididas entre o FARGATE e o FARGATE_SPOT em uma proporção de 1:3.
  • 3 tarefas são executadas usando o FARGATE e 2 tarefas no FARGATE_SPOT.

Usando essa mesma estratégia, com um evento de aumento de escala que aconteceu e a contagem desejada foi aumentada para 9. O agendador do ECS verá que 3 tarefas já foram executadas usando o FARGATE que tem a base satisfeita. Além disso, ele verá que as novas 4 tarefas que estão no estado de PROVISIONAMENTO são divididas entre o FARGATE e o FARGATE_SPOT em uma proporção de 1:3. As 4 tarefas finais são executadas usando o FARGATE e as 5 tarefas no FARGATE_SPOT.


AWS OFICIAL
AWS OFICIALAtualizada há 2 anos