Wie behebe ich den Fehler „HTTP-Anforderung kann nicht ausgeführt werden ... Zeitlimit für Verbindung überschritten“ in AWS Glue?

Lesedauer: 5 Minute
0

Mein AWS-Glue-Auftrag schlägt mit dem Fehler „HTTP-Anforderung kann nicht ausgeführt werden ... Zeitlimit für Verbindung überschritten“ fehl.

Kurzbeschreibung

Wenn Sie einen AWS-Glue-Auftrag ausführen, an den eine Verbindung angefügt ist, schlägt dieser möglicherweise fehl, wenn versucht wird, eine Verbindung zu einem anderen Service-Endpunkt herzustellen. Beispielsweise könnte er versuchen, eine Verbindung zu einem Service-Endpunkt wie Amazon Simple Storage Service (Amazon S3) und AWS Key Management Service (AWS KMS) herzustellen. Der Auftrag schlägt fehl, wenn die Netzwerk-Route zu diesem Service-Endpunkt in dem Subnetz, das in der AWS-Glue-Verbindung verwendet wird, fehlt. Die Fehlermeldung „HTTP-Anforderung kann nicht ausgeführt werden“ oder „fehlgeschlagen: Zeitlimit für Verbindung überschritten“ wird in den AWS-Glue-Auftragsprotokollen angezeigt.

Sie erhalten diesen Fehler aus den folgenden Gründen:

  • Das Subnetz, das in Ihrer AWS-Glue-Verbindung konfiguriert ist, enthält ein Internet-Gateway oder keine Route in der Routing-Tabelle für den ausgefallenen Service-Endpunkt.
  • Wenn Sie Ihren AWS-Glue-Auftrag ausführen, interagiert er mit den AWS-Glue-APIs. Dies passiert, wenn Sie Vorgänge verwenden, die das Auflisten von AWS-Glue-Datenkatalog-Tabellen, das Erstellen neuer Tabellen oder das Lesen aus einer Tabelle erfordern. Wenn Ihr Auftrag auf die AWS-Glue-API zugreifen muss, sendet er eine HTTP-REST-API-Anforderung. In ähnlicher Weise können Sie andere Service-API-Aufrufe an Amazon S3, Amazon Simple Notification Service (Amazon SNS) oder AWS Secret Manager tätigen. Wenn Sie den API-Aufruf tätigen, versucht der Auftrag, eine Verbindung zu diesen Service-Endpunkten herzustellen, und die Anforderung schlägt mit einem Zeitüberschreitungsfehler fehl. Dies liegt daran, dass der Auftrag die Anforderung zwar senden kann, die Antwort jedoch nicht innerhalb des Zeitlimits erhalten hat.

AWS Glue erstellt Elastic-Network-Schnittstellen in dem Subnetz, das in der AWS-Glue-Verbindung angegeben ist. Weitere Informationen finden Sie unter Netzwerkzugriff auf Datenspeicher einrichten.

Ressourcen in AWS-Glue-Aufträgen haben nur private IP-Adressen. Das bedeutet, dass Aufträge über ein Internet-Gateway keine Verbindung zu anderen Ressourcen herstellen können. Der AWS-Glue-Auftrag versucht, Anforderungen an den öffentlichen AWS-Service-Endpunkt zu senden, aber diese Anforderungen kommen von einer privaten IP-Adresse. Der Endpunkt kann also keine Antwort zurücksenden und der Auftrag schlägt mit der Fehlermeldung „Zeitlimit für Verbindung überschritten“ fehl.

Lösung

Die Fehlermeldung, die Sie in den Protokollen finden, sieht je nach Anwendungsfall wie eine der folgenden 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-Anforderung:

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-Anforderung:

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

Stellen Sie sicher, dass der Datenverkehr zwischen dem AWS-Glue-Auftrag und dem Service, an den der Auftrag eine API-Anforderung zu stellen versucht, zulässig ist. Sie können dies überprüfen, indem Sie einen VPC (Virtual Private Cloud)-Endpunkt oder ein NAT-Gateway verwenden.

Einen VPC-Endpunkt verwenden

Verwenden Sie die Amazon-VPC (Amazon Virtual Private Cloud)-Konsole, um einen Schnittstellen-VPC-Endpunkt für den Service zu erstellen, für den Sie den Fehler erhalten. Beispielsweise kann der AWS-Glue-Auftrag beim Versuch, auf die AWS-Glue-API zuzugreifen, fehlschlagen und einen Fehler auslösen. Erstellen Sie den Schnittstellenendpunkt für AWS Glue in demselben VPC-Subnetz, das für Ihre AWS-Glue-Verbindung konfiguriert ist. Damit wird bestätigt, dass der Datenverkehr, der eine Verbindung zum AWS-Glue-Endpunkt herstellen soll, dies über diese Schnittstelle tut.

  1. Öffnen Sie die Amazon-VPC-Konsole.
  2. Wählen Sie Endpunkte im Navigationsbereich aus.
  3. Wählen Sie Endpunkt erstellen aus.
  4. Wählen Sie für die Service-Kategorie die Option AWS-Services aus.
  5. Wählen Sie als Service name (Servicename) den Service aus, zu dem Sie eine Verbindung herstellen. Weitere Informationen finden Sie unter AWS-Services, die in AWS PrivateLink integriert sind.
  6. Wählen Sie für VPC die VPC aus, von der aus Sie auf den AWS-Service zugreifen möchten.
  7. Um einen Schnittstellenendpunkt für Amazon S3 zu erstellen, müssen Sie Additional settings (Zusätzliche Einstellungen) und Enable DNS name (DNS-Namen aktivieren) deaktivieren. Dies liegt daran, dass Amazon S3 kein privates DNS für Schnittstellen-VPC-Endpunkte unterstützt.
  8. Wählen Sie für Subnets (Subnetze) ein Subnetz pro Availability Zone (AZ) aus, von dem aus Sie auf den AWS-Service zugreifen möchten.
  9. Wählen Sie für Security group (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ählen Sie für Policy (Richtlinie) Full access (Vollen Zugriff) aus. Dies ermöglicht alle Vorgänge aller Prinzipale auf allen Ressourcen über den VPC-Endpunkt. Oder wählen Sie Custom (Benutzerdefiniert) aus, um eine VPC-Endpunktrichtlinie anzuhängen. Diese Richtlinie steuert die Berechtigungen, die Prinzipale haben, um Aktionen für Ressourcen über den VPC-Endpunkt auszuführen. Diese Option ist nur verfügbar, wenn der Service VPC-Endpunktrichtlinien unterstützt. Weitere Informationen finden Sie unter VPC-Endpunktrichtlinien.
  11. (Optional) Um ein Tag hinzuzufügen, wählen Sie Add new tag (Neues Tag hinzufügen) aus und geben Sie dann den Tag-Schlüssel und den Tag-Wert ein.
  12. Wählen Sie Endpunkt erstellen aus.

Verwenden eines NAT-Gateways

Ein AWS-NAT-Gateway verbindet Ressourcen privat und sicher über das private Internet. Erstellen Sie ein privates Subnetz und richten Sie Ihre AWS-Glue-Verbindung auf ein privates Subnetz aus. Erstellen Sie gleichzeitig ein NAT-Gateway in einem der öffentlichen Subnetze Ihrer AWS-Glue-VPC. Konfigurieren Sie die Routing-Tabelle Ihres AWS-Glue-Verbindungssubnetzes so, dass Datenverkehr, der ins Internet geleitet wird, dieses NAT-Gateway verwendet. Weitere Informationen finden Sie unter Wie richte ich ein NAT-Gateway für ein privates Subnetz in Amazon VPC ein? und NAT-Gateways.

Hinweis: Wenn Sie ein NAT-Gateway verwenden, erfolgt der Datenverkehr zu Ihrem Service über das Internet.

Zusätzliche Fehlerbehebung

  1. Stellen Sie sicher, dass die Verbindungssicherheitsgruppe und die Subnetzwerk-ACL es AWS Glue ermöglichen, Datenverkehr zu senden, wenn Sie die API-Anforderung stellen.
  2. Um das Konnektivitätsproblem zu testen, starten Sie eine EC2-Instance in derselben VPC, demselben Subnetz und derselben Sicherheitsgruppe, die Sie beim Erstellen der AWS-Glue-Verbindung verwendet haben. Führen Sie 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

Behebung von Fehlern in AWS Glue

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr