Como posso resolver o erro do Amazon ECR “CannotPullContainerError: API error” no Amazon ECS?

5 minuto de leitura
0

Se eu extrair imagens com o Amazon Elastic Container Registry (Amazon ECR), recebo o seguinte erro: “CannotPullContainerError: API error.”

Breve descrição

Você pode receber esse erro devido a um dos seguintes problemas:

  • Seu tipo de inicialização não tem acesso ao endpoint do Amazon ECR
  • Sua política de repositório do Amazon ECR restringe o acesso às imagens do repositório
  • Seu perfil do AWS Identity and Access Management (IAM) não tem as permissões corretas para extrair ou enviar imagens
  • A imagem não pode ser encontrada
  • O acesso ao Amazon Simple Storage Service (Amazon S3) é negado pela sua política de endpoint de gateway da Amazon Virtual Private Cloud (Amazon VPC)

Para extrair imagens, o Amazon ECS deve se comunicar com o endpoint do Amazon ECR.

Use o runbook AWSSupport-TroubleshootECSTaskFailedToStart para solucionar os erros das tarefas do Amazon ECS que falham ao iniciar. Em seguida, consulte as etapas de solução de problemas relevantes para seu problema.

Resolução

Importante:

  • Use o runbook AWSSupport-TroubleshootECSTaskFailedToStart na mesma região da AWS em que seus recursos de cluster do ECS estão localizados.
  • Ao usar o runbook, você deve usar a ID de tarefa que falhou mais recentemente. Se a tarefa com falha fizer parte do serviço Amazon ECS, use a tarefa que falhou mais recentemente no serviço. A tarefa com falha deve estar visível em ECS:DescribeTasks durante a execução da automação. Por padrão, as tarefas interrompidas do ECS ficam visíveis por 1 hora após entrarem no estado Interrompido. O uso da ID de tarefa que falhou mais recentemente impede que a limpeza do estado da tarefa interrompa a análise durante a automação.

Para obter instruções sobre como iniciar o runbook, consulte AWSSupport-TroubleshootECSTaskFailedToStart. Com base na saída da automação, use uma das seguintes etapas manuais de solução de problemas.

Seu tipo de inicialização não tem acesso ao endpoint do Amazon ECR

1.Você pode estar executando uma tarefa com um tipo de execução do Amazon Elastic Compute Cloud (Amazon EC2) e sua instância de contêiner esteja em uma sub-rede privada. Ou você pode estar executando uma tarefa com o tipo de execução do AWS Fargate em uma sub-rede privada. Em qualquer um desses casos, confirme se sua sub-rede tem uma rota para um gateway NAT na tabela de rotas.

2.Se sua tarefa tiver um tipo de execução do EC2 e sua instância de contêiner estiver em uma sub-rede pública, a instância deverá ter um endereço IP público.

-ou-

Se você estiver executando uma tarefa usando o tipo de inicialização do Fargate em uma sub-rede pública, escolha ENABLED em Atribuir automaticamente o IP público ao iniciar a tarefa. Isso permite que sua tarefa tenha acesso à rede de saída para extrair uma imagem.

3.    Configure o gateway NAT em sua VPC para encaminhar solicitações para a Internet.
**Observação:**Você pode usar o AWS PrivateLink como alternativa a um gateway NAT.

4.Se você estiver usando o AWS PrivateLink para Amazon ECR, verifique a configuração do grupo de segurança associado aos endpoints VPC do Amazon ECR. Você deve permitir o tráfego de entrada por HTTPS (porta 443) de dentro do grupo de segurança do seu VPC CIDR, instância de contêiner ou tarefa ou serviço do Fargate.

5.    Confirme se o grupo de segurança anexado à sua instância e à tarefa do Fargate permite acesso externo ao seguinte: HTTPS na porta 443, DNS (UDP e TCP) na porta 53 e a lista de controle de acesso à rede (ACL da rede) da sua sub-rede.

Sua política de repositório do Amazon ECR restringe o acesso às imagens do repositório

Verifique sua política de repositório do Amazon ECR para ver as restrições de acesso ao repositório. O exemplo de política de repositório a seguir permite que os usuários do IAM enviem e extraiam imagens:

{  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowPushPull",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:user/push-pull-user-1",
          "arn:aws:iam::123456789012:user/push-pull-user-2"
        ]
      },
      "Action": [
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage",
        "ecr:BatchCheckLayerAvailability",
        "ecr:PutImage",
        "ecr:InitiateLayerUpload",
        "ecr:UploadLayerPart",
        "ecr:CompleteLayerUpload"
      ]
    }
  ]
}

Seu perfil do IAM não tem as permissões corretas para extrair imagens

Se você estiver executando uma tarefa com um tipo de execução do EC2, verifique as permissões do perfil do IAM da instância associada ao perfil de instância. Ela deve ter permissões para acessar o repositório Amazon ECR.

**Observação:**A política gerenciada pela AWS AmazonEC2ContainerRegistryReadOnly fornece as permissões mínimas necessárias para extrair imagens.

Se você estiver executando uma tarefa usando um tipo de inicialização do Fargate, confirme se a AmazonECSTaskExecutionRolePolicy tem as permissões necessárias.

A imagem não pode ser encontrada

Para confirmar o nome correto da imagem no URI, verifique o parâmetro da imagem na seção de definições do contêiner da definição da sua tarefa.

**Observação:**Para extrair por etiqueta, use o seguinte formato de nome de imagem: registry/repository[:tag]. Para extrair por resumo, use o formato registry/repository[@digest].

O acesso ao Amazon S3 é negado pela sua política de endpoint do gateway do Amazon VPC

Se você tiver uma rota para um endpoint do gateway do Amazon VPC para o Amazon S3 na tabela de rotas, preencha o seguinte:

1.    Verifique a política de acesso do endpoint do gateway do Amazon VPC.

2.    Confirme se o endpoint do gateway do Amazon VPC tem a política correta para acessar o bucket do S3.

Informações relacionadas

Erros da tarefa CannotPullContainer