Comment puis-je résoudre l’erreur Amazon ECR « CannotPullContainerError : Erreur d’API » dans Amazon ECS ?

Lecture de 5 minute(s)
0

Lorsque j’extrais des images avec Amazon Elastic Container Registry (Amazon ECR), je reçois le message d’erreur suivant : « CannotPullContainerError : Erreur d’API. »

Brève description

Cette erreur peut s’afficher en raison de l’un des problèmes suivants :

  • Votre type de lancement n’a pas accès au point de terminaison Amazon ECR
  • La politique de votre référentiel Amazon ECR restreint l’accès aux images du référentiel
  • Votre rôle Gestion des identités et des accès AWS (IAM) ne dispose pas des autorisations nécessaires pour extraire ou diffuser des images
  • L’image est introuvable
  • L’accès à Amazon Simple Storage Service (Amazon S3) est refusé par votre stratégie de point de terminaison de passerelle Amazon Virtual Private Cloud (Amazon VPC)

Pour extraire des images, Amazon ECS doit communiquer avec le point de terminaison Amazon ECR.

Pour résoudre les erreurs liées aux tâches Amazon ECS qui ne démarrent pas, utilisez le runbook AWSSupport-TroubleshootECSTaskFailedToStart. Ensuite, suivez les étapes de dépannage correspondant à votre problème.

Résolution

Important :

  • utilisez le runbook AWSSupport-TroubleshootECSTaskFailedToStart dans la même région AWS que celle où se trouvent les ressources de votre cluster ECS.
  • Lorsque vous appliquez le runbook, vous devez utiliser le dernier ID de tâche ayant échoué. Si la tâche ayant échoué fait partie d’un service Amazon ECS, utilisez la dernière tâche ayant échoué dans le service. La tâche ayant échoué doit être visible dans ECS:DescribeTasks pendant l’automatisation. Par défaut, les tâches ECS arrêtées sont visibles pendant 1 heure après le passage à l’état Arrêté. L’utilisation du dernier identifiant de tâche ayant échoué permet d’éviter que le nettoyage de l’état de la tâche n’interrompe l’analyse pendant l’automatisation.

Pour savoir comment lancer le runbook, consultez la page AWSSupport-TroubleshootECSTaskFailedToStart. En fonction des résultats de l’automatisation, utilisez l’une des étapes de dépannage manuelles suivantes.

Votre type de lancement n’a pas accès au point de terminaison Amazon ECR

1.    Il se peut que vous exécutiez une tâche avec un type de lancement Amazon Elastic Compute Cloud (Amazon EC2) et que votre instance de conteneur se trouve dans un sous-réseau privé. Il se peut également que vous exécutiez une tâche avec le type de lancement AWS Fargate dans un sous-réseau privé. Dans ces deux cas, vérifiez que votre sous-réseau possède une route vers une passerelle NAT dans la table de routage.

2.    Si votre tâche est associée à un type de lancement EC2 et que votre instance de conteneur se trouve dans un sous-réseau public, vérifiez que l’instance possède une adresse IP publique.

-ou-

Si vous exécutez une tâche à l’aide du type de lancement Fargate dans un sous-réseau public, choisissez ACTIVÉ pour attribuer automatiquement une adresse IP publique lorsque vous la lancez. Cela permet à votre tâche d’accéder au réseau sortant pour extraire une image.

3.    Configurez la passerelle NAT de votre VPC pour acheminer les demandes vers Internet.
Remarque : vous pouvez utiliser AWS PrivateLink à la place d’une passerelle NAT.

4.    Si vous utilisez AWS PrivateLink pour Amazon ECR, vérifiez la configuration du groupe de sécurité associé aux points de terminaison VPC pour Amazon ECR. Vous devez autoriser le trafic entrant via HTTPS (port 443) depuis le groupe de sécurité de votre CIDR VPC, de votre instance de conteneur ou de votre tâche ou service Fargate.

5.    Vérifiez que le groupe de sécurité associé à votre instance et à la tâche Fargate autorise l’accès sortant suivant : HTTPS sur le port 443, DNS (UDP et TCP) sur le port 53 et la liste de contrôle d’accès réseau (ACL réseau) de votre sous-réseau.

La politique de votre référentiel Amazon ECR restreint l’accès aux images du référentiel

Vérifiez la politique de votre référentiel Amazon ECR pour connaître les restrictions d’accès au référentiel. L’exemple de politique de référentiel suivant permet aux utilisateurs IAM de transférer et d’extraire des images :

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

Votre rôle IAM ne dispose pas des autorisations appropriées pour extraire des images

Si vous exécutez une tâche avec un type de lancement EC2, vérifiez les autorisations pour le rôle IAM d’instance associé au profil d’instance. Il doit disposer des autorisations requises pour accéder au référentiel Amazon ECR.

Remarque : la politique gérée par AWS AmazonEC2ContainerRegistryReadOnly fournit les autorisations minimales requises pour extraire des images.

Si vous exécutez une tâche à l’aide d’un type de lancement Fargate, vérifiez qu’AmazonECSTaskExecutionRolePolicy dispose des autorisations requises.

L’image est introuvable

Pour confirmer que le nom de l’image est correct dans l’URI, vérifiez le paramètre d’image dans la section des définitions de conteneur de votre définition de tâche.

Remarque : pour effectuer une extraction par balise, utilisez le format de nom d’image suivant : registry/repository[:tag]. Pour réaliser une extraction synthétique, utilisez le format registry/repository[@digest].

L’accès à Amazon S3 est refusé par votre stratégie de point de terminaison de passerelle Amazon VPC

Si vous avez une route vers un point de terminaison de passerelle Amazon VPC pour Amazon S3 dans la table de routage, procédez comme suit :

1.    Vérifiez la stratégie d’accès du point de terminaison de la passerelle Amazon VPC.

2.    Vérifiez que le point de terminaison de la passerelle Amazon VPC dispose de la stratégie appropriée pour accéder au compartiment S3.

Informations connexes

Erreurs liées à la tâche CannotPullContainer