Wie kann ich 500-Fehler bei der VPC-Link-Integration für Amazon API Gateway beheben?

Letzte Aktualisierung: 01.11.2022

Ich habe Amazon API Gateway mit VPC-Link-Integrationen konfiguriert. Wenn ich meine API aufrufe, erhalte ich einen Konfigurations- oder internen Fehler mit einem HTTP-500-Statuscode. Wie kann ich dieses Problem beheben?

Kurzbeschreibung

Das AWS-API-Gateway leitet den Datenverkehr möglicherweise nicht an Backend-Ressourcen weiter und gibt einen HTTP-500-Statuscode mit VPC-Links zurück, wenn:

  • Der VPC-Link sich im Status Failed (Fehlgeschlagen) befindet, der Endpunktservice gelöscht wurde oder sich im Status Rejected (Abgelehnt) befindet.
  • Das registrierte Ziel für die Zielgruppe ungesund ist oder nicht verwendet wird.
    Hinweis: Wenn 60 Tage lang kein Datenverkehr über den VPC-Link gesendet wird, wird er INACTIVE (INAKTIV). Weitere Informationen finden Sie unter Arbeiten mit VPC-Links für HTTP-APIs.
  • Sicherheitsgruppen lassen keinen Datenverkehr auf bestimmten Ports zu.
  • Die Netzwerkzugriffskontrollliste (ACL) blockiert den Datenverkehr.
  • Das Ziel hört nicht auf die Zielports.
  • Das Domänennamenzertifikat stimmt nicht mit dem TLS-aktivierten Network Load Balancer (NLB) oder Application Load Balancer (ALB) überein.

Wenn die Amazon-CloudWatch-Protokollierung für Ihre API aktiviert ist, wird in den Ausführungsprotokollen eine Fehlermeldung angezeigt, die die Ursache des Fehlers angibt.

Beispiel: HTTP-500-Fehlermeldungen in CloudWatch-Protokollen

Thu Aug 04 17:48:21 UTC 2022 : Execution failed due to configuration error: There was an internal error while executing your request
Thu Aug 04 17:48:21 UTC 2022 : Method completed with status: 500

-oder-

Thu Aug 04 19:50:21 UTC 2022 : Execution failed due to configuration error: Host name 'domain.com.com' 
does not match the certificate subject provided by the peer (CN=myinstance.com)
Thu Aug 04 19:50:21 UTC 2022 : Method completed with status: 500

Auflösung

Fehlerursache finden

Wenn Sie dies noch nicht getan haben, aktivieren Sie die CloudWatch-Protokollierung für Ihre REST-API. Stellen Sie sicher, dass Sie die Ausführungsprotokollierung konfigurieren.

Tipp: Wenn Sie die Protokollierungseinstellungen konfigurieren, wählen Sie für Log Level die Option INFO. Wählen Sie dann Vollständige Anfragen/Antwortdaten protokollieren.

Stellen Sie fest, was die Fehler verursacht, indem Sie die Ausführungsprotokolle der REST-API in CloudWatch anzeigen.

Suchen Sie nach der Fehlermeldung in den Ausführungsprotokollen und befolgen Sie die folgenden Lösungsschritte

„Execution failed due to configuration error: There was an internal error while executing your request“ (Ausführung aufgrund eines Konfigurationsfehlers fehlgeschlagen: Beim Ausführen Ihrer Anfrage ist ein interner Fehler aufgetreten)

  • Stellen Sie sicher, dass der VPC-Link-Load-Balancer vorhanden ist und nicht gelöscht wurde.
  • Stellen Sie sicher, dass sich der VPC-Link im Status AVAILABLE (VERFÜGBAR) befindet. Wenn sich der VPC-Link im Status FAILED (FEHLGESCHLAGEN) befindet, müssen Sie einen neuen VPC-Link erstellen und ihn Ihrer API zuordnen. Hinweis: Stellen Sie sicher, dass Sie die API bereitstellen, nachdem Sie die Integrationsanforderung geändert haben.
  • Stellen Sie sicher, dass sich die VPC-Link-Endpunktverbindung im Status AVAILABLE (VERFÜGBAR) befindet.
  • Wenn die VPC-ID mit einer Stufenvariablen referenziert wird, überprüfen Sie, ob die VPC-Link-ID korrekt ist.
  • Stellen Sie sicher, dass der VPC-Link-Load-Balancer den HTTP-/HTTPS-Port überwacht, für den die Anforderung konfiguriert ist. Überprüfen Sie, ob die Listener für den richtigen Port konfiguriert sind. Überprüfen Sie die Netzwerk-ACLs und stellen Sie sicher, dass sie die Anforderung nicht blockieren.
  • Stellen Sie sicher, dass die Zielgruppe die Anfrage akzeptiert. Überprüfen Sie die Netzwerk-ACLs, um sicherzustellen, dass eingehender und ausgehender Datenverkehr zulässig ist. Überprüfen Sie die Sicherheitsgruppen, um sicherzustellen, dass eingehender Datenverkehr für die konfigurierten Ports zulässig ist.
  • Wenn die Anforderung einen 500-Fehler zurückgibt, empfängt die Verbindung möglicherweise TCP-RST-Pakete. Stellen Sie sicher, dass der Backend-Server betriebsbereit ist. Stellen Sie sicher, dass auf dem Backend-Ziel ein Service auf dem Zielport ausgeführt wird. Stellen Sie sicher, dass das Backend-Ziel auf dem Zielport als Listener fungiert.

„Execution failed due to configuration error: Host name 'domain.com.com' does not match the certificate subject provided by the peer (CN=myinstance.com)“ (Ausführung aufgrund eines Konfigurationsfehlers fehlgeschlagen: Hostname 'domain.com.com' stimmt nicht mit dem vom Peer bereitgestellten Zertifikatssubjekt überein (cn=myinstance.com)

Stellen Sie sicher, dass der Endpunktdomänenname mit dem Zertifikat übereinstimmt, das vom TLS-aktivierten Load-Balancer-Ziel zurückgegeben wird.

„Execution failed due to configuration error: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target“ (Ausführung aufgrund eines Konfigurationsfehlers fehlgeschlagen: PKIX-Pfaderstellung fehlgeschlagen: sun.security.provider.certpath.SuncertPathBuilderException: Es konnte kein gültiger Zertifizierungspfad zum angeforderten Ziel gefunden werden)

Dieser Fehler bedeutet, dass das API Gateway die Stammzertifizierungsstelle nicht finden kann. Selbst wenn insecureSkipVerification für die Eigenschaft TlsConfig der Integration auf true (wahr) gesetzt ist, führt API Gateway eine grundlegende Zertifikatsüberprüfung durch, nämlich für:

  • Das Ablaufdatum des Zertifikats.
  • Den Hostnamen.
  • Das Vorhandensein einer Stammzertifizierungsstelle.

„Execution failed due to configuration error: Cannot verify ECDH ServerKeyExchange signature“ (Ausführung aufgrund eines Konfigurationsfehlers fehlgeschlagen: ECDH ServerKeyExchange-Signatur kann nicht überprüft werden)

Dieser Fehler bedeutet, dass der TLS-Handshake fehlschlägt, weil ein Schlüssel und das entsprechende Zertifikat nicht übereinstimmen. Um dieses Problem zu beheben, überprüfen Sie den Inhalt der Dateien, die für Ihre konfigurierten Zertifizierungsstellen, Zertifikate und Schlüssel verwendet werden.

„Execution failed due to an internal error“ (Ausführung ist aufgrund eines internen Fehlers fehlgeschlagen)

Dieser Fehler tritt auf, weil Amazon API Gateway aufgrund von Ziel-Resets auf dem Load Balancer keine Verbindung zum Load Balancer über den VPC-Link herstellen konnte. Um dieses Problem zu beheben, stellen Sie das Timeout auf dem Ziel so ein, dass es höher ist als das Standardtimeout (350 Sekunden) auf dem Load Balancer.

„Execution failed due to configuration error: Not a valid protocol version: {Text of string}“ (Ausführung aufgrund eines Konfigurationsfehlers fehlgeschlagen: Keine gültige Protokollversion: {Text der Zeichenfolge})

Dieser Fehler bedeutet, dass die Integration mit einer ungültigen HTTP-Antwort geantwortet hat, die nicht der HTTP-Spezifikation entspricht. Dies könnte darauf hinweisen, dass das integrierte Backend ungültige Daten zurück an Amazon API Gateway sendet.

Gehen Sie wie folgt vor, um diesen Fehler zu beheben:

  • Reproduzieren Sie die Anfrage von Amazon API Gateway. Testen Sie den von Amazon API Gateway verwendeten Service-Endpunkt, indem Sie einen VPC-Endpunkt erstellen, der mit der Serviceendpunkt-ID verknüpft ist. Sie können auch Paketerfassungen ausführen, um die vom integrierten Backend zurückgegebene Antwort zu überprüfen.
  • Ändern Sie das Load-Balancer-Protokoll je nach Zielantwort in TLS oder TCP, um doppelte Verschlüsselung zu vermeiden.
  • Stellen Sie sicher, dass insecureSkipVerification für die Eigenschaft TLsConfig der Integration auf true (wahr) gesetzt ist.