Salta al contenuto

Come posso risolvere un errore ResourceInitializationError quando tento di estrarre un'immagine da Amazon ECR?

5 minuti di lettura
0

Ricevo un errore ResourceInitializationError quando la mia attività Amazon Elastic Container Service (Amazon ECS) tenta di estrarre un'immagine da Amazon Elastic Container Registry (Amazon ECR).

Breve descrizione

Quando avvii un'attività Amazon ECS, potresti ricevere uno dei seguenti messaggi di errore ResourceInitializationError:

"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"

-oppure-

"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."

Questi errori si verificano quando l'attività Amazon ECS non è in grado di estrarre l'immagine del container o di recuperare le informazioni di autenticazione da Amazon ECR.

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Verifica la connettività delle attività

Utilizza il runbook AWSSupport-TroubleshootECSTaskFailedToStart per testare la connettività delle attività. Devi eseguire il runbook nella stessa Regione AWS in cui si trovano le risorse del cluster Amazon ECS. Inoltre, utilizza l'ID dell'attività non riuscita più recente. Se l'attività non riuscita fa parte di un servizio Amazon ECS, utilizza l'ultima attività non riuscita del servizio. L'attività non riuscita deve essere visibile in ECS:DescribeTasks durante l'automazione. Per impostazione predefinita, le attività arrestate sono visibili per 1 ora dopo il passaggio allo stato Arrestata.

In base all'output dell'automazione, utilizza una delle seguenti procedure manuali per la risoluzione dei problemi.

Verifica il routing dalle sottoreti verso Internet

Controlla la ](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html)tabella di routing[ della sottorete in cui hai distribuito l'attività Amazon ECS. Assicurati che l'attività abbia una route predefinita (0.0.0.0/0) verso Internet e che il gruppo di sicurezza dell'attività consenta il traffico in uscita sulla porta 443.

Sottoreti pubbliche

Se l'attività AWS Fargate si trova in una sottorete pubblica, devi assegnare un indirizzo IP pubblico all'attività.

Per visualizzare l'interfaccia di rete elastica e l'indirizzo IP privato dell'attività, esegui questo comando AWS CLI describe-tasks:

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

Nota: sostituisci cluster-name con il nome del tuo cluster e task-arn con l'ARN della tua attività.

Per verificare se è presente un indirizzo IP pubblico collegato all'interfaccia di rete dell'attività, esegui questo comando describe-network-interfaces:

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

Nota: sostituisci example-eni con l'interfaccia di rete della tua attività.

Configura Amazon ECS per assegnare automaticamente un indirizzo IPv4 pubblico all'interfaccia di rete associata all'attività. Seleziona Attivato per IP pubblico quando esegui una nuova attività o crei un nuovo servizio.

Non puoi assegnare automaticamente indirizzi IP pubblici per attività o servizi esistenti. Invece, per ricreare il servizio con l'assegnazione automatica dell'indirizzo IP pubblico attivata, esegui questo comando create-service:

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

Nota: sostituisci cluster-name con il nome del tuo cluster, service-name con il nome del tuo servizio e taskdef:revision con la tua definizione dell'attività. Sostituisci subnet-aaaaaa e subnet-bbbbbb con le tue sottoreti e sg-ccccccc con il tuo gruppo di sicurezza.

Assicurati che la connessione Amazon Virtual Private Cloud (Amazon VPC) per il cluster abbia i nomi host DNS e la risoluzione DNS attivati.

Sottoreti private

Se l'attività si trova in una sottorete privata, controlla le seguenti configurazioni in base alla fonte di connettività Internet:

  • Se utilizzi un gateway NAT, posizionalo in una sottorete pubblica.
  • Se utilizzi AWS PrivateLink, verifica che il gruppo di sicurezza dell'endpoint VPC consenta il traffico in entrata sulla porta 443 dal CIDR VPC o dal gruppo di sicurezza del servizio.

Controlla la lista di controllo degli accessi alla rete (ACL) e le impostazioni del gruppo di sicurezza

Assicurati che la lista di controllo degli accessi alla rete (ACL) e i gruppi di sicurezza consentano l'accesso in uscita alla porta 443 dalla sottorete.

Nota: le attività di Fargate devono avere accesso in uscita alla porta 443 per consentire il traffico in uscita e accedere agli endpoint Amazon ECS.

(Solo PrivateLink) Controlla gli endpoint Amazon VPC

Se utilizzi PrivateLink, devi creare i seguenti endpoint richiesti:

  • Per Amazon ECR, crea com.amazonaws.region.ecr.dkr e com.amazonaws.region.ecr.api.
  • Per il gateway Amazon Simple Storage Service (Amazon S3), crea com.amazonaws.region.s3.
  • Se utilizzi Amazon CloudWatch per archiviare i log delle applicazioni, crea anche com.amazonaws.region.logs.

Nota: negli endpoint precedenti, sostituisci region con la tua Regione.

Per ulteriori informazioni, consulta Considerazioni sugli endpoint VPC di Amazon ECR.

Se il VPC non ha un gateway Internet e le attività utilizzano il driver di log awslogs, crea un endpoint VPC per CloudWatch Logs.

Assicurati che il gruppo di sicurezza dell'endpoint VPC consenta il traffico proveniente dal gruppo di sicurezza delle attività Fargate o dall'intervallo CIDR VPC sulla porta TCP 443.

Controlla i ruoli e le autorizzazioni IAM

Assicurati che il ruolo di esecuzione delle attività AWS Identity and Access Management (IAM) abbia l’autorizzazione AmazonECSTaskExecutionRolePolicy o autorizzazioni equivalenti.

Per ulteriori informazioni sulle autorizzazioni dei ruoli e sul ruolo di esecuzione delle attività, consulta Ruolo IAM di esecuzione di attività Amazon ECS.

Informazioni correlate

Verifica della connettività di attività Amazon ECS arrestate