Ir para o conteúdo

Como solucionar problemas relacionados a tarefas agendadas no Amazon ECS?

6 minuto de leitura
0

Agendei minha tarefa do Amazon Elastic Container Service (Amazon ECS) para ser executada periodicamente. No entanto, minha tarefa do Amazon ECS não está ativada e eu não recebo os logs de execução nem o histórico das tarefas no cluster.

Resolução

Observação: Se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Quando você usa uma tarefa agendada, o Amazon EventBridge chama a API RunTask do Amazon ECS para executar as tarefas em seu nome. Sua tarefa agendada do Amazon ECS pode não ser invocada devido aos seguintes motivos:

  • Você configurou incorretamente a hora do EventBridge ou a expressão cron.
  • A regra ou o cronograma do EventBridge não invocam o alvo.
  • A API RunTask falhou ao ser executada.
  • A instância de contêiner foi encerrada devido a problemas da aplicação ou restrições de recursos.
  • As tarefas agendadas falharam devido a restrições de capacidade.
  • As tarefas agendadas falharam devido a problemas de conectividade de rede.

Confirme se a expressão cron do EventBridge está configurada corretamente

Para obter a expressão cron do EventBridge, execute um dos seguintes comandos da AWS CLI.

Se você usa as regras do EventBridge, execute o comando describe-rule:

aws events describe-rule --name example-rule --region example-region

Se você usa o Agendador do EventBridge, execute o comando get-schedule:

aws scheduler get-schedule --name example-schedule --region example-region

Observação: substitua example-rule pelo nome da sua regra, example-schedule pelo nome do seu cronograma e example-region pela sua região da AWS.

Na saída do comando, verifique a expressão cron do EventBridge no parâmetro ScheduleExpression. Certifique-se de definir o cronograma de rules para o fuso horário UTC+0.

Verificar se a regra ou o cronograma não invoca o destino

Para verificar as métricas Invocations e FailedInvocations do Amazon CloudWatch para a regra do EventBridge, conclua as seguintes etapas:

  1. Abra o console do CloudWatch.
  2. No painel de navegação, escolha Métricas e, em seguida, escolha Todas as métricas.
  3. Escolha Eventos.
  4. Escolha Por nome da regra.
  5. Selecione TriggerRules, Invocations e FailedInvocations para a regra do EventBridge que executa a tarefa do Amazon ECS.
  6. Escolha a guia Métricas representadas em gráfico.
  7. Em Estatística, selecione SUM para cada métrica.

Para verificar o desempenho do Agendador do EventBridge, revise as métricas InvocationAttemptCount, targetErrorCount e InvocationDroppedCount do CloudWatch.

Se você ver dados de FailedInvocations ou InvocationDroppedCount, verifique se o perfil do AWS Identity and Access Management (AWS IAM) do EventBridge tem permissão para invocar sua tarefa.

Se você ver dados de TargetErrorCount, há um problema com a invocação de destino. Verifique se sua tarefa começou, começou e falhou imediatamente, ou não foi concluída.

Verificar se a ação RunTask falhou

Conclua as seguintes etapas:

  1. Abra o console do AWS CloudTrail.
  2. No painel de navegação, selecione Histórico de eventos.
  3. Em Atributos de pesquisa, selecione Nome do evento.
  4. Em Inserir um nome de evento, insira “run task”.
  5. No filtro de intervalo de tempo, selecione os horários em que você esperava que a tarefa programada do Amazon ECS fosse executada.
  6. Na tabela, selecione o evento que você deseja visualizar.
  7. Nos registros de eventos JSON, verifique errorMessage ou responseElements.failures.reason para confirmar que a API não invocou a tarefa programada.
    Observação: é possível encontrar o ID da tarefa que falhou no campo responseElements.tasks.taskARN.
  8. Solucione a falha da API.

Verificar se o contêiner saiu após a execução da tarefa

Mesmo após a execução da tarefa, as tarefas do Amazon ECS podem ser interrompidas devido a problemas da aplicação ou restrições de recursos. Para resolver esse problema, consulte Como faço para solucionar problemas de tarefas do Amazon ECS que são interrompidas ou não iniciam quando meu contêiner é encerrado?

Verificar se há problemas de restrição de capacidade

Os problemas de restrição de capacidade que causam falhas nas tarefas ocorrem quando o cluster não tem recursos computacionais suficientes, como CPU e memória. Ou os problemas ocorrem quando outros workloads em execução no mesmo cluster elevam o uso de recursos. Restrições ou estratégias restritivas de posicionamento de tarefas também podem reduzir seus recursos disponíveis.

Para monitorar o uso de recursos, configure o Container Insights em seus clusters do Amazon ECS. Também é possível configurar os alarmes do CloudWatch para notificar você assim que atingir um limite de uso de recursos. Para garantir que os recursos estejam disponíveis quando você precisar deles, defina reservas de CPU e memória para tarefas. Talvez seja necessário aumentar a contagem desejada para que o serviço do Amazon ECS aumente a escala horizontalmente do cluster ou usar o ajuste de escala automático do cluster.

Analise as restrições de posicionamento de tarefas e ajuste-as para que sejam menos restritivas. É uma prática recomendada priorizar workloads críticas, reprogramar workloads não essenciais e testar diferentes estratégias de posicionamento, como spread, binpack ou random.

Use os provedores de capacidade do Amazon ECS para reservar capacidade para workloads importantes. É uma prática recomendada usar instâncias dedicadas do Amazon Elastic Compute Cloud (Amazon EC2) para workloads que exigem hardware isolado. Use o AWS Fargate para tarefas que exigem recursos disponíveis.

Verificar se há problemas de conectividade de rede

Para solucionar problemas de conectividade de rede em tarefas programadas, execute as seguintes ações:

  • Certifique-se de que as regras do grupo de segurança e da lista de controle de acesso à rede (ACL de rede) permitam o tráfego de entrada e saída necessários para suas tarefas.
  • Verifique se você configurou corretamente o gateway da internet ou o gateway NAT da sua nuvem privada virtual (VPC).
  • Verifique suas tabelas de rotas de gateway.
  • Revise as definições das tarefas quanto a variáveis de ambiente com endereços IP ou nomes de host codificados. Verifique se os endereços IP ou nomes de host estão corretos e você tem acesso a eles.

Para testar a conectividade de rede das instâncias de contêiner, conclua as seguintes etapas:

  1. Use o SSH para se conectar à sua instância do Amazon EC2.
  2. Para executar comandos remotamente em seu contêiner, execute o seguinte comando execute-command:
    aws ecs execute-command --cluster cluster-name --task task-id --container container-name --command "/bin/bash" --interactive
    Observação: substitua cluster-name pelo nome do cluster, task-id pelo ID da tarefa e container-name pelo nome da instância de contêiner.
  3. Para testar a conectividade, execute um dos seguintes comandos:
    curl -v http://example.com
    -ou-
    nslookup example.com
    -ou-
    nc -zv example.com 80
    Observação: substitua exemplo.com pelo seu domínio.
  4. Verifique a resolução e o roteamento do DNS para identificar problemas de rede.

Para simplificar a conectividade, execute tarefas no Fargate, e não no Amazon EC2. Com o Fargate, você não precisa gerenciar a infraestrutura subjacente. Ou use endpoints da VPC para se conectar a serviços sem um gateway da internet, dispositivo NAT, conexão VPN ou conexão do AWS Direct Connect.

AWS OFICIALAtualizada há um ano