Ao usar o AWS re:Post, você concorda com os AWS re:Post Termos de uso

Como resolvo o erro "DockerTimeoutError" no AWS Batch?

6 minuto de leitura
0

Os trabalhos em meu ambiente de computação do AWS Batch estão falhando e retornam o seguinte erro: “DockerTimeoutError: Could not transition to created; timed out after waiting 4m0s.” Quero solucionar o erro.

Breve descrição

Se as chamadas de API Docker start e Docker create demorarem mais de quatro minutos, o AWS Batch retornará um erro DockerTimeoutError.

Observação: o limite do tempo limite padrão definido pelo agente de contêiner do Amazon Elastic Container Service (Amazon ECS) é de 4 minutos.

Os motivos a seguir geralmente causam esse erro:

  • Os volumes de instâncias do ECS do ambiente computacional do AWS Batch estão sob alta pressão de E/S de todas as outras tarefas em sua fila. Esses trabalhos podem esgotar o equilíbrio de ruptura.
  • Os contêineres do ECS interrompidos não estão sendo limpos com rapidez suficiente para liberar o daemon do Docker. Se você usar uma Amazon Machine Image (AMI) personalizada em vez da AMI padrão fornecida pelo AWS Batch, poderá enfrentar problemas com o Docker.

Se nenhum desses problemas estiver causando o erro, execute as seguintes ações para solucionar ainda mais o problema:

  • Verifique seus logs do Docker para identificar a origem do erro.
  • Execute o script do coletor de logs do Amazon ECS nas instâncias do ECS no cluster do ECS associado ao seu ambiente computacional AWS Batch.

Resolução

Resolva problemas de equilíbrio de rajada

Verifique o equilíbrio de intermitência da sua instância do ECS

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

Conclua as seguintes etapas:

  1. Abra o console do Amazon ECS.
  2. No painel de navegação, escolha Clusters. Em seguida, selecione o cluster que contém seu trabalho.
    Observação: o nome do cluster começa com o nome do ambiente computacional, seguido por _Batch_ e um hash aleatório de números e letras.
  3. Escolha a guia Infraestrutura.
  4. Na coluna Infraestrutura, abaixo da linha Instâncias do contêiner, escolha seu ID de instância.
    Observação: para encontrar o ID da instância do trabalho que falhou, execute o comando da AWS CLI describe-jobs do AWS Batch. O ID da instância aparece na saída de containerInstanceArn.
  5. No console do Amazon EC2, certifique-se de que a instância ainda esteja selecionada. Em seguida, na seção Armazenamento, escolha o link para seu volumeID.
  6. Na janela pop-up do dispositivo de bloqueio, em ID do volume, selecione seu volume.
  7. Escolha a guia Monitoramento. Em seguida, escolha Equilíbrio de intermitência para verificar suas métricas de equilíbrio de intermitência. Se o equilíbrio de intermitência cair para 0, então ele está esgotado.

Crie um modelo de execução para seu ambiente de computação gerenciada

Observação: se você alterar o modelo de execução, deverá criar um novo ambiente computacional.

Conclua as seguintes etapas:

  1. Abra o console do Amazon EC2 e escolha Modelos de execução.
  2. Escolha Criar modelo de execução.
  3. Para ID de AMI, selecione a AMI otimizada padrão do Amazon ECS.
  4. Na seção Armazenamento (Volumes), escolha um tipo de volume na coluna Tipo de volume. Em seguida, insira um valor inteiro na coluna Tamanho (GiB).
    Observação: se você escolher SSD de IOPS provisionadas (io1) para seu tipo de volume, insira um valor inteiro permitido para IOPS.
  5. Escolha Criar modelo de execução.
  6. Use seu novo modelo de execução para criar um novo ambiente computacional gerenciado.

Criar um ambiente computacional do AWS Batch com sua AMI

Observação: se você alterar a AMI, deverá criar um novo ambiente computacional, pois não é possível atualizar o parâmetro ID da AMI.

Conclua as seguintes etapas:

  1. Abra o console do Amazon EC2.
  2. Escolha Executar instâncias.
  3. Siga as etapas no assistente de configuração para criar sua instância.
    Importante: na página Adicionar armazenamento, modifique o tipo ou o tamanho do volume da sua instância. Quanto maior o tamanho do volume, maior é o desempenho da linha de base e mais lentamente reabastece o equilíbrio de intermitência. Para obter melhor performance para altas cargas de E/S, altere o volume para o tipo io1.
  4. Crie uma AMI de recursos computacionais a partir da sua instância.
  5. Crie um ambiente computacional para o AWS Batch que inclua seu ID de AMI.

Resolver problemas do Docker

Por padrão, o agente de contêiner do Amazon ECS limpa automaticamente as tarefas interrompidas e as imagens do Docker que suas instâncias de contêiner não estão usando. Se você executar novos trabalhos com novas imagens, seu armazenamento em contêiner poderá ser preenchido com imagens do Docker que você não usa. A AMI padrão para o AWS Batch otimiza as configurações de limpeza do Amazon ECS.

Conclua as seguintes etapas:

  1. Use o SSH para se conectar à instância de contêiner do seu ambiente de computação do AWS Batch.
  2. Para inspecionar o agente de contêiner do Amazon ECS, execute o comando Docker inspect ecs-agent. Em seguida, revise a seção env na saída.
    Observação: para acelerar a limpeza de tarefas e imagens, reduza os valores das seguintes variáveis:
    ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION
    ECS_IMAGE_CLEANUP_INTERVAL
    ECS_IMAGE_MINIMUM_CLEANUP_AGE
    ECS_NUM_IMAGES_DELETE_PER_CYCLE
    Você também pode usar parâmetros ajustáveis para a limpeza automatizada de tarefas e imagens.
  3. Crie uma nova AMI com valores atualizados.
    -ou-
    Crie um modelo de lançamento com os dados do usuário que inclua suas novas variáveis de ambiente.

Crie uma nova AMI com valores atualizados

Conclua as seguintes etapas:

  1. Defina os parâmetros de configuração do agente no arquivo /etc/ecs/ecs.config.
  2. Reinicie seu agente de contêiner.
  3. Crie uma AMI de recursos computacionais a partir da sua instância.
  4. Crie um ambiente computacional para o AWS Batch que inclua sua ID de AMI.

Crie um modelo de lançamento com os dados do usuário que inclua suas novas variáveis de ambiente.

Conclua as seguintes etapas:

  1. Crie um modelo de lançamento com dados do usuário.

    Por exemplo, os dados do usuário no seguinte arquivo de várias partes MIME substituem as configurações padrão de limpeza de imagem do Docker para um recurso computacional:

    MIME-Version: 1.0
    Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="
    --==MYBOUNDARY==
    Content-Type: text/x-shellscript; charset="us-ascii"
    #!/bin/bash
    echo ECS_IMAGE_CLEANUP_INTERVAL=60m >> /etc/ecs/ecs.config
    echo ECS_IMAGE_MINIMUM_CLEANUP_AGE=60m >> /etc/ecs/ecs.config
    --==MYBOUNDARY==--

    Para obter mais informações sobre arquivos MIME de várias partes, consulte MIME multi-part file no site do cloud-init.

  2. Use seu novo modelo de execução para criar um ambiente computacional gerenciado.

Informações relacionadas

Serviços da AWS que publicam métricas do CloudWatch

AMIs de recursos computacionais

amazon-ecs-agent no site do GitHub

AWS OFICIAL
AWS OFICIALAtualizada há 7 meses