Fehlerbehebung bei Problemen mit HTTP-API-Lambda-Integrationen
Im Folgenden finden Sie Hinweise zur Fehlerbehebung bei Fehlern und Problemen, die bei der Verwendung von AWS Lambda-Integrationen mit HTTP-APIs auftreten können.
Problem: Meine API mit einer Lambda-Integration gibt zurüc {"message":"Internal Server Error"}
Um den internen Serverfehler zu beheben, fügen Sie die $context.integrationErrorMessage
Protokollierungsvariable zur Ihrem Protokollformat hinzu und sehen Sie sich die Protokolle Ihrer HTTP-API an. Um dies zu erreichen, gehen Sie wie folgt vor:
So erstellen Sie eine Protokollgruppe mithilfe der AWS Management Console
Öffnen Sie die CloudWatch-Konsole unter https://console.aws.amazon.com/cloudwatch/
. -
Wählen Sie Protokollgruppen.
-
Wählen Sie Protokollgruppe erstellen.
-
Geben Sie einen Protokollgruppennamen ein und wählen Sie dann Erstellen.
-
Notieren Sie sich den Amazon-Ressourcennamen (ARN) für Ihre Protokollgruppe. Das ARN-Format lautet arn:aws:logs:
region
:account-id
:log-group:log-group-name
. Sie benötigen den ARN der Protokollgruppe, um die Zugriffsprotokollierung für Ihre HTTP-API zu aktivieren.
So fügen Sie die $context.integrationErrorMessage
-Protokollierungsvariable hinzu
Melden Sie sich bei der API Gateway-Konsole unter https://console.aws.amazon.com/apigateway
an. -
Wählen Sie Ihre HTTP-API.
-
Wählen Sie unter Monitor (Überwachen) die Option Logging (Protokollierung).
-
Wählen Sie eine Stufe Ihrer API aus.
-
Wählen Sie Bearbeiten und aktivieren Sie dann die Zugriffsprotokollierung.
-
Geben Sie für Protokollstandortden ARN der Protokollgruppe ein, die Sie im vorherigen Schritt erstellt haben.
-
Wählen Sie für Protokollformat die Option CLF aus.
-
Fügen Sie
$context.integrationErrorMessage
am Ende des Protokollformats hinzu. -
Wählen Sie Save (Speichern) aus.
So zeigen Sie die Protokolle Ihrer API an
-
Generieren von Protokollen. Verwenden Sie einen Browser oder
curl
, um Ihre API aufzurufen.$
curl https://api-id
.execute-api.us-west-2
.amazonaws.com/route
Melden Sie sich bei der API Gateway-Konsole unter https://console.aws.amazon.com/apigateway
an. -
Wählen Sie Ihre HTTP-API.
-
Wählen Sie unter Monitor (Überwachen) die Option Logging (Protokollierung).
-
Wählen Sie die Stufe Ihrer API aus, für die Sie die Protokollierung aktiviert haben.
-
Wählen Sie View logs in CloudWatch (Protokolle in CloudWatch anzeigen).
-
Wählen Sie den neuesten Protokoll-Stream, um die Protokolle Ihrer HTTP-API einzusehen.
-
Ihr Protokolleintrag sollte wie folgt aussehen:
Da wir $context.integrationErrorMessage
dem Protokollformat hinzugefügt haben, wird in unseren Protokollen eine Fehlermeldung angezeigt, die das Problem zusammenfasst.
Ihre Protokolle enthalten möglicherweise eine andere Fehlermeldung, die darauf hinweist, dass ein Problem mit Ihrem Lambda-Funktionscode vorliegt. Überprüfen Sie in diesem Fall Ihren Lambda-Funktionscode und vergewissern Sie sich, dass Ihre Lambda-Funktion eine Antwort im erforderlichen Format zurückgibt. Wenn Ihre Protokolle keine Fehlermeldung enthalten, fügen Sie $context.error.message
und $context.error.responseType
Ihrem Protokollformat hinzu, um weitere Informationen zur Fehlerbehebung zu erhalten.
In diesem Fall zeigen die Protokolle, dass API Gateway nicht über die erforderlichen Berechtigungen zum Aufrufen der Lambda-Funktion verfügte.
Wenn Sie eine Lambda-Integration in der API Gateway-Konsole erstellen, konfiguriert API Gateway automatisch die Berechtigungen zum Aufrufen der Lambda-Funktion. Wenn Sie eine Lambda-Integration mit der AWS CLI, AWS CloudFormation oder einem SDK erstellen, müssen Sie API Gateway die Berechtigungen zum Aufrufen der Funktion erteilen. Mit dem folgenden AWS CLI-Befehl werden Berechtigungen für die $default
-Stufe und $default
-Route einer HTTP-API zum Aufrufen einer Lambda-Funktion erteilt.
aws lambda add-permission \ --function-name
my-function
\ --statement-idapigateway-invoke-permissions
\ --action lambda:InvokeFunction \ --principal apigateway.amazonaws.com --source-arn "arn:aws:execute-api:us-west-2
:123456789012
:api-id
/\$default
/\$default
"
Bestätigen Sie die Funktionsrichtlinie auf der Registerkarte Permissions (Berechtigungen) der Lambda-Konsole.
Versuchen Sie erneut, Ihre API aufzurufen. Sie sollten die Antwort Ihrer Lambda-Funktion sehen.