Passer au contenu

Comment résoudre une erreur ResourceInitializationError lorsque j'essaie d'extraire une image depuis Amazon ECR ?

Lecture de 6 minute(s)
0

Je reçois une erreur ResourceInitializationError lorsque ma tâche Amazon Elastic Container Service (Amazon ECS) tente d'extraire une image d'Amazon Elastic Container Registry (Amazon ECR).

Brève description

Lorsque vous lancez une tâche Amazon ECS, l'un des messages d'erreur ResourceInitializationError suivants peut s'afficher :

« Unable to pull secrets or registry auth: The task cannot pull registry auth from Amazon ECR: There is a connection issue between the task and Amazon ECR. Check your task network configuration.  RequestError: send request failed caused by: Post "https://api.ecr.region-code.amazonaws.com/": dial tcp ip.xx.xx.xx.xx:443: i/o timeout » (Impossible d'extraire les secrets ou d'authentifier le registre : La tâche ne peut pas extraire l'authentification du registre depuis Amazon ECR : Il existe un problème de connexion entre la tâche et Amazon ECR. Vérifiez la configuration de votre réseau de tâches. RequestError : échec de l’envoi de la requête causé par : Publiez "https://api.ecr.region-code.amazonaws.com/": composez le code tcp ip.xx.xx.xx.xx:443 : délai d’expiration des i/o »

-ou-

« unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve ecr registry auth: service call has been retried 3 time(s): RequestError: send request failed caused by: Post "https://api.ecr.region-code.amazonaws.com/": dial tcp ip.xx.xx.xx.xx:443: i/o timeout. Please check your task network configuration. » (impossible d’extraire les secrets ou d’authentifier le registre : échec de récupération de la ressource d’exécution : impossible de récupérer l’authentification du registre ecr : l’appel de service a été retenté à 3 reprise(s) : RequestError : échec de l’envoi de la requête causé par : Publiez « https://api.ecr.region-code.amazonaws.com/ » : composez le code tcp ip.xx.xx.xx.xx:443 : délai d'expiration des i/o. Veuillez vérifier la configuration de votre réseau de tâches)

Ces erreurs se produisent lorsque votre tâche Amazon ECS ne parvient pas à extraire l'image du conteneur ou à récupérer les informations d'authentification depuis Amazon ECR.

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Tester la connectivité des tâches

Utilisez le dossier d’exploitation AWSSupport-TroubleshootECSTaskFailedToStart pour tester la connectivité de vos tâches. Vous devez exécuter le dossier d'exploitation de la même région AWS où sont situées vos ressources de cluster ECS. Utilisez également l'ID de tâche ayant échoué le plus récemment. Si la tâche ayant échoué fait partie du 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 arrêtées restent visibles pendant 1 heure après être passées à l'état Arrêté.

En fonction des résultats de l'automatisation, utilisez l'une des mesures de dépannage manuel suivantes.

Vérifier les routes entre vos sous-réseaux et Internet

Consultez la table de routage de votre sous-réseau sur lequel vous avez déployé la tâche Amazon ECS. Assurez-vous que votre tâche possède une route par défaut (0.0.0.0/0) vers Internet et que le groupe de sécurité des tâches autorise le trafic sortant sur le port 443.

Sous-réseaux publics

Si votre tâche AWS Fargate se trouve dans un sous-réseau public, vous devez attribuer une adresse IP publique à votre tâche.

Pour afficher l'interface réseau Elastic et l'adresse IP privée de votre tâche, exécutez la commande describe-tasks de l’interface de ligne de commande AWS suivante :

aws ecs describe-tasks --cluster cluster-name --tasks task-arn

Remarque : Remplacez cluster-name par le nom de votre cluster et task-arn par l'ARN de votre tâche.

Pour vérifier si une adresse IP publique est associée à l'interface réseau de la tâche, exécutez la commande describe-network-interfaces suivante :

aws ec2 describe-network-interfaces --network-interface-ids example-eni

Remarque : Remplacez example-eni par l'interface réseau de votre tâche.

Configurez Amazon ECS pour attribuer automatiquement une adresse IPv4 publique à l'interface réseau associée à votre tâche. Sélectionnez Activé pour Adresse IP publique lorsque vous exécutez une nouvelle tâche ou créez un nouveau service.

Vous ne pouvez pas attribuer automatiquement des adresses IP publiques à des tâches ou à des services existants. À la place, pour recréer le service avec l'attribution automatique d'adresses IP publiques activée, exécutez la commande create-service suivante :

aws ecs create-service --cluster cluster-name --service-name service-name --task-definition taskdef:revision --desired-count 1 --launch-type FARGATE --network-configuration "awsvpcConfiguration={subnets=[subnet-aaaaaa,subnet-bbbbbb],securityGroups=[sg-ccccccc],assignPublicIp=ENABLED}"

Remarque : Remplacez cluster-name par le nom de votre cluster, service-name par votre nom de service et taskdef:revision par votre définition de tâche. Remplacez subnet-aaaaaa et subnet-bbbbbb par vos sous-réseaux, et sg-ccccccc par votre groupe de sécurité.

Assurez-vous que les noms d'hôte DNS et la résolution DNS sont activés sur la connexion Amazon Virtual Private Cloud (Amazon VPC) de votre cluster.

Sous-réseaux privés

Si votre tâche se trouve dans un sous-réseau privé, vérifiez les configurations suivantes en fonction de votre source de connectivité Internet :

  • Si vous utilisez une passerelle NAT, vous devez intégrer votre passerelle NAT à un sous-réseau public.
  • Si vous utilisez AWS PrivateLink, vérifiez que le groupe de sécurité du point de terminaison de VPC autorise le trafic entrant sur le port 443 en provenance du CIDR du VPC ou du groupe de sécurité de service.

Vérifier les paramètres de votre ACL réseau et de votre groupe de sécurité

Assurez-vous que votre liste de contrôle d'accès au réseau (ACL réseau) et que vos groupes de sécurité autorisent l'accès sortant au port 443 depuis le sous-réseau.

Remarque : Les tâches Fargate doivent disposer d'un accès sortant au port 443 pour autoriser le trafic sortant et accéder aux points de terminaison Amazon ECS.

(PrivateLink uniquement) Vérifiez vos points de terminaison de VPC Amazon

Si vous utilisez PrivateLink, vous devez créer les points de terminaison requis :

  • Pour Amazon ECR, créez com.amazonaws.region.ecr.dkr et com.amazonaws.region.ecr.api.
  • Pour la passerelle Amazon Simple Storage Service (Amazon S3), créez com.amazonaws.region.s3.
  • Si vous utilisez Amazon CloudWatch pour stocker les journaux des applications, créez également com.amazonaws.region.logs.

Remarque : Dans les points de terminaison précédents, remplacez region par votre région.

Pour plus d'informations, consultez la section Considérations relatives aux points de terminaison Amazon ECR VPC.

Si votre VPC ne possède pas de passerelle Internet et que vos tâches utilisent le pilote de journal awslogs, créez un point de terminaison de VPC pour CloudWatch Logs.

Assurez-vous que le groupe de sécurité du point de terminaison de VPC autorise le trafic provenant du groupe de sécurité des tâches Fargate ou de la plage d'adresses CIDR du VPC sur le port TCP 443.

Vérifier vos autorisations et rôles IAM

Assurez-vous que le rôle d'exécution des tâches AWS Identity and Access Management (IAM) dispose de l'autorisation AmazonECSTaskExecutionRolePolicy ou d'autorisations équivalentes.

Pour plus d'informations sur les autorisations de rôle et le rôle d'exécution des tâches, consultez la section Rôle IAM d'exécution des tâches Amazon ECS.

Informations connexes

Vérification de la connectivité des tâches interrompues par Amazon ECS