Come posso risolvere l'errore Amazon ECR “CannotPullContainerError: API error” in Amazon ECS?

4 minuti di lettura
0

Se estraggo immagini con Amazon Elastic Container Registry (Amazon ECR), si verifica il seguente errore: "CannotPullContainerError: API error."

Breve descrizione

Questo errore può verificarsi a causa di uno dei seguenti problemi:

  • Il tipo di avvio non consente l’accesso all'endpoint Amazon ECR
  • La policy del repository Amazon ECR limita l'accesso alle immagini del repository
  • Il ruolo AWS Identity and Access Management (IAM) non dispone delle autorizzazioni necessarie per estrarre o inviare immagini
  • L'immagine non può essere trovata
  • L'accesso ad Amazon Simple Storage Service (Amazon S3) è negato dalla policy degli endpoint del gateway Amazon Virtual Private Cloud (Amazon VPC)

Per estrarre immagini, Amazon ECS deve comunicare con l'endpoint Amazon ECR.

Per risolvere gli errori relativi alle attività Amazon ECS che non si avviano, usa il runbook AWSSupport-TroubleshootECSTaskFailedToStart. Quindi, consulta le procedure relative ai problemi pertinenti.

Risoluzione

Importante:

  • Usa il runbook AWSSupport-TroubleshootECSTaskFailedToStart nella stessa Regione AWS che contiene le risorse del tuo cluster ECS.
  • Quando si utilizza il runbook, è necessario utilizzare l'ID dell'ultima attività non riuscita. Se l'attività non riuscita fa parte di un servizio Amazon ECS, utilizza l'ultima attività non riuscita nel servizio. L'attività non riuscita deve essere visibile in ECS:DescribeTasks durante l'automazione. Per impostazione predefinita, le attività ECS arrestate sono visibili per un’ora dopo il passaggio allo stato Arrestate. L'utilizzo dell'ID dell’ultima attività non riuscita impedisce che la pulizia dello stato dell'attività interrompa l'analisi durante l'automazione.

Per istruzioni su come avviare il runbook, consulta AWSSupport-TroubleshootECSTaskFailedToStart. In base all'output dell'automazione, utilizza una delle seguenti procedure manuali per risolvere i problemi.

Il tipo di avvio non consente l’accesso all'endpoint Amazon ECR

1.    Potrebbe essere in esecuzione un'attività con il tipo di avvio Amazon Elastic Compute Cloud (Amazon EC2) e l'istanza di container è in una sottorete privata. Oppure, potrebbe essere in esecuzione un'attività con il tipo di avvio di AWS Fargate in una sottorete privata. In entrambi i casi, verifica che la sottorete disponga di un percorso verso un gateway NAT nella tabella di routing.

2.    Se l’attività ha un tipo di avvio EC2 e l'istanza di container è in una sottorete pubblica, l'istanza deve avere un indirizzo IP pubblico.

-oppure-

Se stai eseguendo un'attività con il tipo di avvio Fargate in una sottorete pubblica, imposta Assegna IP pubblico automaticamente su ABILITATO all'avvio dell'attività. In questo modo, l'attività disporrà dell'accesso alla rete in uscita per estrarre un'immagine.

3.    Configura il gateway NAT nel VPC per indirizzare le richieste a Internet.
Nota: puoi usare AWS PrivateLink come alternativa a un gateway NAT.

4.    Se utilizzi AWS PrivateLink per Amazon ECR, controlla la configurazione del gruppo di sicurezza associato agli endpoint VPC per Amazon ECR. È necessario consentire il traffico in entrata su HTTPS (porta 443) dall'interno del gruppo di sicurezza del VPC CIDR, dell'istanza di container o dell'attività o servizio Fargate.

5.    Verifica che il gruppo di sicurezza collegato all’istanza e all'attività Fargate consentano i seguenti accessi in uscita: HTTPS sulla porta 443, DNS (UDP e TCP) sulla porta 53, lista di controllo degli accessi alla rete (ACL di rete) della sottorete.

La policy del repository Amazon ECR limita l'accesso alle immagini del repository

Controlla la policy del repository Amazon ECR per verificare le restrizioni all'accesso al repository. Il seguente esempio di policy del repository consente agli utenti IAM di inviare ed estrarre immagini:

{  "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"
      ]
    }
  ]
}

Il ruolo IAM non dispone delle autorizzazioni necessarie per estrarre immagini

Se stai eseguendo un'attività con il tipo di avvio EC2, controlla le autorizzazioni del ruolo IAM dell'istanza associato al profilo dell'istanza. Deve disporre delle autorizzazioni per accedere al repository Amazon ECR.

Nota: la policy gestita da AWS AmazonEC2ContainerRegistryReadOnly fornisce le autorizzazioni minime necessarie per estrarre immagini.

Se stai eseguendo un'attività utilizzando il tipo di avvio Fargate, conferma che AmazonECSTaskExecutionRolePolicy disponga delle autorizzazioni richieste.

L'immagine non può essere trovata

Per confermare il nome corretto dell'immagine nell'URI, controlla il parametro dell'immagine nella sezione delle definizioni dei container della definizione dell'attività.

Nota: per estrarre per tag, usa il seguente formato di nome dell'immagine: registry/repository[:tag]. Per estrarre tramite digest, usa il formato registry/repository[@digest].

L'accesso ad Amazon S3 è negato dalla policy sull'endpoint del gateway Amazon VPC

Se nella tabella di routing è indicato un percorso verso un endpoint del gateway Amazon VPC per Amazon S3, completa questa procedura:

1.    Verifica la policy di accesso dell'endpoint del gateway Amazon VPC.

2.    Verifica che l'endpoint del gateway Amazon VPC disponga della policy corretta per accedere al bucket S3.

Informazioni correlate

CannotPullContainer task errors