Direkt zum Inhalt

Wie behebe ich einen ResourceInitializationError-Fehler, wenn ich versuche, ein Image aus Amazon ECR abzurufen?

Lesedauer: 5 Minute
0

Ich erhalte einen ResourceInitializationError-Fehler, wenn meine Amazon Elastic Container Service (Amazon ECS)-Aufgabe versucht, ein Image aus der Amazon Elastic Container Registry (Amazon ECR) abzurufen.

Kurzbeschreibung

Wenn du eine Amazon ECS-Aufgabe startest, erhältst du möglicherweise eine der folgenden ResourceInitializationError-Fehlermeldungen:

„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“

-oder-

„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.“

Diese Fehler treten auf, wenn die Amazon ECS-Aufgabe das Containerimage oder Authentifizierungsinformationen von Amazon ECR nicht abrufen kann.

Lösung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Testen der Aufgaben-Konnektivität

Verwende das Runbook AWSSupport-TroubleshootECSTaskFailedToStart, um die Aufgaben-Konnektivität zu testen. Du musst das Runbook in derselben AWS-Region ausführen, in der sich deine Amazon ECS-Cluster-Ressourcen befinden. Verwende außerdem die zuletzt fehlgeschlagene Aufgaben-ID. Wenn die fehlgeschlagene Aufgabe Teil eines Amazon ECS-Service ist, verwende die zuletzt fehlgeschlagene Aufgabe im Service. Die fehlgeschlagene Aufgabe muss während der Automatisierung in ECS:DescribeTasks sichtbar sein. Standardmäßig sind abgehaltene Aufgaben 1 Stunde lang sichtbar, nachdem sie den Status Angehalten erreicht haben.

Verwende auf der Grundlage der Ergebnisse der Automatisierung einen der folgenden manuellen Schritte zur Fehlerbehebung.

Überprüfen der Routen von deinen Subnetzen zum Internet

Überprüfe die Routing-Tabelle des Subnetzes, in dem du die Amazon ECS-Aufgabe bereitgestellt hast. Stelle sicher, dass die Aufgabe eine Standardroute (0.0.0.0/0) zum Internet hat und dass die Aufgaben-Sicherheitsgruppe ausgehenden Verkehr auf Port 443 zulässt.

Öffentliche Subnetze

Wenn sich die AWS Fargate-Aufgabe in einem öffentlichen Subnetz befindet, musst du der Aufgabe eine öffentliche IP-Adresse zuweisen.

Um die ElasticNetzwerkschnittstelle und die private IP-Adresse der Aufgabe anzuzeigen, führe den folgenden AWS-CLI-Befehl describe-tasks aus:

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

Hinweis: Ersetze cluster-name durch deinen Cluster-Namen und task-arn durch deinen Aufgaben-ARN.

Um zu überprüfen, ob an die Netzwerkschnittstelle der Aufgabe eine öffentliche IP-Adresse angefügt ist, führe den folgenden Befehl describe-network-interfaces aus:

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

Hinweis: Ersetze example-eni durch die Netzwerkschnittstelle deiner Aufgabe.

Konfiguriere Amazon ECS so, dass der Netzwerkschnittstelle, die der Aufgabe zugeordnet ist, automatisch eine öffentliche IPv4-Adresse zugewiesen wird. Wähle Aktiviert für Öffentliche IP aus, wenn du eine neue Aufgabe ausführst oder einen neuen Service erstellst.

Du kannst vorhandenen Aufgaben oder Services nicht automatisch öffentliche IP-Adressen zuweisen. Führe stattdessen den folgenden Befehl create-service aus, um den Service mit aktivierter automatischer öffentlicher IP-Adresszuweisung neu zu erstellen:

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

Hinweis: Ersetze cluster-name durch deinen Cluster-Namen, service-name durch deinen Service-Namen und taskdef:revision durch deine Aufgabendefinition. Ersetze subnet-aaaaaa und subnet-bbbbbb durch deine Subnetze und sg-ccccccc durch deine Sicherheitsgruppe.

Stelle sicher, dass für die Amazon Virtual Private Cloud (Amazon VPC)-Verbindung für den Cluster DNS-Host-Namen und die DNS-Auflösung aktiviert sind.

Private Subnetze

Wenn sich deine Aufgabe in einem privaten Subnetz befindet, überprüfe die folgenden Konfigurationen basierend auf der Internetverbindungsquelle:

  • Wenn du ein NAT-Gateway verwendest, platziere das NAT-Gateway in einem öffentlichen Subnetz.
  • Wenn du AWS PrivateLink verwendest, stelle sicher, dass die Sicherheitsgruppe des VPC-Endpunkts eingehenden Datenverkehr auf Port 443 von der VPC-CIDR- oder Service-Sicherheitsgruppe zulässt.

Überprüfung der Einstellungen deiner Netzwerk-ACL und Sicherheitsgruppe

Stelle sicher, dass die Netzwerk-Zugriffskontrollliste (Netzwerk-ACL) und die Sicherheitsgruppen den ausgehenden Zugriff auf Port 443 aus dem Subnetz zulassen.

Hinweis: Fargate-Aufgaben müssen ausgehenden Zugriff auf Port 443 haben, um ausgehenden Datenverkehr zu ermöglichen und auf Amazon ECS-Endpunkte zuzugreifen.

(nur PrivateLink) Überprüfung der Amazon VPC-Endpunkte

Wenn du PrivateLink verwendest, musst du die folgenden erforderlichen Endpunkte erstellen:

  • Erstelle für Amazon ECR com.amazonaws.region.ecr.dkr und com.amazonaws.region.ecr.api.
  • Erstelle für das Amazon Simple Storage Service (Amazon S3)-Gateway com.amazonaws.region.s3.
  • Wenn du Amazon CloudWatch zum Speichern von Anwendungsprotokollen verwendest, erstelle auch com.amazonaws.region.logs.

Hinweis: Ersetze in den vorherigen Endpunkten region durch deine Region.

Weitere Informationen findest du unter Überlegungen zu Amazon ECR VPC-Endpunkten.

Wenn deine VPC kein Internet-Gateway hat und die Aufgaben den awslogs-Protokolltreiber verwenden, erstelle einen VPC-Endpunkt für CloudWatch Logs.

Stelle sicher, dass die Sicherheitsgruppe des VPC-Endpunkts Datenverkehr aus der Fargate-Aufgaben-Sicherheitsgruppe oder dem VPC-CIDR-Bereich auf TCP-Port 443 zulässt.

Überprüfung deiner IAM-Rollen und -Berechtigungen

Stelle sicher, dass die Aufgabenausführungsrolle von AWS Identity and Access Management (IAM, Identitäts- und Zugriffsmanagement) über die AmazonECSTaskExecutionRolePolicy-Berechtigung oder gleichwertige Berechtigungen verfügt.

Weitere Informationen zu Rollenberechtigungen und der Rolle zur Aufgabenausführung findest du unter Amazon ECS-IAM-Rolle zur Aufgabenausführung.

Ähnliche Informationen

Überprüfung, ob Amazon ECS die Task-Konnektivität angehalten hat