Direkt zum Inhalt

Wie behebe ich den Fehler "Unable to execute HTTP request... connect timed out" in AWS Glue?

Lesedauer: 5 Minute
0

Mein AWS Glue-Job schlägt mit dem Fehler "Unable to execute HTTP request... connect timed out" fehl.

Kurzbeschreibung

Wenn du einen AWS Glue-Job ausführst, an den eine Verbindung angehängt ist, schlägt er möglicherweise fehl, wenn versucht wird, eine Verbindung zu einem anderen Service-Endpunkt herzustellen. Beispielsweise kann versucht werden, eine Verbindung zu einem Service-Endpunkt wie Amazon Simple Storage Service (Amazon S3) und AWS Key Management Service (AWS KMS) herzustellen. Der Job schlägt fehl, wenn die Netzwerkroute zu diesem Service-Endpunkt in dem Subnetz fehlt, das für die AWS Glue-Verbindung verwendet wird. Die Fehlermeldung "Unable to execute HTTP request" oder "failed: connect timed out" wird in den AWS Glue-Job-Protokollen angezeigt.

Dieser Fehler tritt aus den folgenden Gründen auf:

  • Das Subnetz, das in deiner AWS Glue-Verbindung konfiguriert ist, enthält ein Internet-Gateway oder keine Route in der Routing-Tabelle für den fehlgeschlagenen Service-Endpunkt.
  • Wenn du deinen AWS Glue-Job ausführst, interagiert er mit den AWS Glue-APIs. Dies passiert, wenn du Vorgänge ausführst, die das Auflisten von AWS Glue-Datenkatalog-Tabellen, das Erstellen neuer Tabellen oder das Lesen aus einer Tabelle erfordern. Wenn dein Job auf die AWS Glue-API zugreifen muss, sendet er eine HTTP-REST-API-Anfrage. In ähnlicher Weise kannst du andere Service-API-Aufrufe an Amazon S3, Amazon Simple Notification Service (Amazon SNS) oder AWS Secret Manager richten. Wenn du den API-Aufruf tätigst, versucht der Job, eine Verbindung zu diesen Service-Endpunkten herzustellen, und die Anfrage schlägt mit einem Timeout-Fehler fehl. Dies liegt daran, dass der Job zwar die Anfrage senden kann, die Antwort aber nicht innerhalb des Timeout-Zeitraums erhalten hat.

AWS Glue erstellt elastische Netzwerkschnittstellen in dem Subnetz, das in der AWS-Glue-Verbindung angegeben ist. Weitere Informationen findest du unter Netzwerkzugriff auf Datenspeicher einrichten.

Ressourcen in AWS Glue-Jobs haben nur private IP-Adressen. Dies bedeutet, dass Jobs über ein Internet-Gateway keine Verbindung zu anderen Ressourcen herstellen können. Der AWS Glue-Job versucht, Anfragen an den öffentlichen AWS-Service-Endpunkt zu senden, aber diese Anfragen kommen von einer privaten IP-Adresse. Der Endpunkt kann also keine Antwort zurücksenden und der Job schlägt mit der Fehlermeldung "connect timed out" fehl.

Lösung

Die Fehlermeldung, die du in den Protokollen findest, sieht je nach Anwendungsfall wie folgt aus:

AWS Glue-REST-API:

AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: com.amazonaws.SdkClientException: Unable to execute HTTP request: Connect to glue.ap-southeast-1.amazonaws.com:443

Amazon S3-Anfrage:

Unable to execute HTTP request: Connect to s3BucketName.us-east-1.amazonaws.com:443 [s3BucketName.s3.us-east-1.amazonaws.com/xx.xxx.xx.xxx ] failed: connect timed out

AWS KMS-Anfrage:

Unable to execute HTTP request: Connect to kms.us-east-1.amazonaws.com:443 [kms.us-east-1.amazonaws.com/xx.xxx.xx.xxx ] failed: connect timed out

Vergewissere dich, dass der Datenverkehr zwischen dem AWS Glue-Job und dem Service, an den der Job versucht, eine API-Anfrage zu stellen, zulässig ist. Du kannst dies überprüfen, indem du einen Virtual Private Cloud (VPC)-Endpunkt oder ein NAT-Gateway verwendest.

VPC-Endpunkt verwenden

Verwende die Amazon Virtual Private Cloud (Amazon VPC)-Konsole, um einen Schnittstellen-VPC-Endpunkt für den Service zu erstellen, für den du die Fehlermeldung erhältst. Beispielsweise kann der AWS Glue-Job fehlschlagen und einen Fehler auslösen, wenn du versuchst, auf die AWS Glue-API zuzugreifen. Erstelle den Schnittstellenendpunkt für AWS Glue in demselben VPC-Subnetz, das für deine AWS Glue-Verbindung konfiguriert ist. Dies bestätigt, dass der Datenverkehr, der eine Verbindung zum AWS Glue-Endpunkt herstellen soll, dies über diese Schnittstelle tut.

  1. Öffne die Amazon-VPC-Konsole.
  2. Wähle im Navigationsbereich Endpunkte aus.
  3. Wähle Endpunkt erstellen aus.
  4. Wähle als Servicekategorie die Option AWS-Services aus.
  5. Wähle für Servicename den Service aus, mit dem du eine Verbindung herstellst. Weitere Informationen findest du unter AWS-Services, die in AWS PrivateLink integriert sind.
  6. Wähle für VPC die VPC aus, von der aus du auf den AWS-Service zugreifen möchtest.
  7. Um einen Schnittstellenendpunkt für Amazon S3 zu erstellen, musst du Zusätzliche Einstellungen und DNS-Name aktivieren deaktivieren. Dies liegt daran, dass Amazon S3 kein privates DNS für Schnittstellen-VPC-Endpunkte unterstützt.
  8. Wähle für Subnetze ein Subnetz pro Availability Zone (AZ) aus, von dem aus du auf den AWS-Service zugreifen möchtest.
  9. Wähle für Sicherheitsgruppe eine Sicherheitsgruppe aus, die den Endpunkt-Netzwerkschnittstellen zugeordnet werden soll. Die Sicherheitsgruppenregeln müssen Ressourcen zulassen, die den VPC-Endpunkt verwenden. Der VPC-Endpunkt kommuniziert mit dem AWS-Service, der dann mit der Endpunkt-Netzwerkschnittstelle kommuniziert.
  10. Wähle für Richtlinie die Option Vollzugriff aus. Dies ermöglicht allen Prinzipalen alle Vorgänge für alle Ressourcen über den VPC-Endpunkt. Oder wähle Benutzerdefiniert aus, um eine VPC-Endpunktrichtlinie anzuhängen. Diese Richtlinie steuert die Berechtigungen, die Prinzipale haben, um Aktionen an Ressourcen über den VPC-Endpunkt auszuführen. Diese Option ist nur verfügbar, wenn der Service VPC-Endpunktrichtlinien unterstützt. Weitere Informationen findest du unter VPC-Endpunktrichtlinien.
  11. (Optional) Um ein Tag hinzuzufügen, wähle Neues Tag hinzufügen aus und gib den Tag-Schlüssel und den Tag-Wert ein.
  12. Wähle Endpunkt erstellen aus.

NAT-Gateway verwenden

Ein AWS-NAT-Gateway verbindet Ressourcen privat und sicher über das private Internet. Erstelle ein privates Subnetz und richte deine AWS Glue-Verbindung auf ein privates Subnetz aus. Erstelle gleichzeitig ein NAT-Gateway in einem der öffentlichen Subnetze deiner AWS Glue-VPC. Konfiguriere die Routing-Tabelle deines AWS Glue-Verbindungssubnetzes so, dass, wenn der Datenverkehr ins Internet geleitet wird, dies über dieses NAT-Gateway erfolgt. Weitere Informationen findest du unter Wie richte ich ein NAT-Gateway für ein privates Subnetz in Amazon VPC ein? und NAT-Gateways.

Hinweis: Wenn du ein NAT-Gateway verwendest, wird der Datenverkehr zu deinem Service über das Internet übertragen.

Zusätzliche Problembehandlung

  1. Stelle sicher, dass die Verbindungssicherheitsgruppe und die Subnetznetzwerk-ACL es AWS Glue ermöglichen, Datenverkehr zu senden, wenn du die API-Anfrage stellst.
  2. Um das Konnektivitätsproblem zu testen, starte eine EC2-Instance in derselben VPC, demselben Subnetz und derselben Sicherheitsgruppe, die du beim Erstellen der AWS Glue-Verbindung verwendet hast. Führe dann den folgenden Befehl aus, um die Konnektivität mit dem Service-Endpunkt zu bestätigen:
telnet <glue endpoint url> 443
dig <glue endpoint url>

Beispiele:

$ telnet glue.us-east-1.amazonaws.com 443
$ dig glue.us-east-1.amazonaws.com

Ähnliche Informationen

Beheben von Fehlern in AWS Glue

AWS OFFICIALAktualisiert vor 3 Jahren