Wie behebe ich HTTP-502-Fehler bei REST-APIs in API Gateway mit Lambda-Proxy-Integration?
Ich habe die Proxy-Integration von Amazon API Gateway so konfiguriert, dass sie mit einer AWS-Lambda-Funktion läuft. Wenn ich meine REST-API aufrufe, erhalte ich einen Konfigurationsfehler und den HTTP-Statuscode 502.
Kurzbeschreibung
Wenn die Berechtigungen Ihrer Lambda-Funktion falsch sind oder die Antwort auf die API-Anfrage nicht richtig formatiert ist, antwortet API Gateway mit HTTP-Statuscode 502.
Beispiele: HTTP-502-Fehlermeldungen, wie sie in Amazon CloudWatch Logs erscheinen
Wed Aug 03 08:10:00 UTC 2022 : Execution failed due to configuration error: WE Aug 03 09:10:00 UTC 2022 : Method completed with status: 502
– oder –
Wed Aug 03 08:20:33 UTC 2022 : Lambda execution failed with status 200 due to customer function error: [Errno 13] Permission denied: '/var/task/lambda_function.py'. Lambda request id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Wed Aug 03 08:20:33 UTC 2022 : Method completed with status: 502
Damit API Gateway die Antwort einer Lambda-Funktion verarbeiten kann, muss die Funktion ihre Ausgabe gemäß dem folgenden JSON-Format bereitstellen:
{ "isBase64Encoded": true|false, "statusCode": httpStatusCode, "headers": { "headerName": "headerValue", ... }, "body": "..." }
Weitere Informationen finden Sie unter Output format of a Lambda function for proxy integration.
Behebung
- Überprüfen Sie die CloudWatch-Metriken Ihrer REST-API mit dem API-Dashboard in API Gateway.
-oder-
Überprüfen Sie die Protokollereignisse Ihrer REST-API in der Amazon-CloudWatch-Konsole. - Überprüfen Sie in den Protokollen das Format der Antwort Ihrer Lambda-Funktion an Ihre API. Wenn die Antwort nicht im erforderlichen JSON-Format vorliegt, formatieren Sie sie neu.
- Stellen Sie sicher, dass die Ressourcenrichtlinie der Lambda-Funktion den Zugriff zum Aufruf der Funktion mit API Gateway ermöglicht.
- Wenn die Ausführung der Lambda-Funktion aufgrund eines Problems mit den Paketberechtigungen fehlschlägt, überprüfen Sie die Berechtigungen. Weitere Informationen finden Sie unter Wie behebe ich die Fehler „permission denied“ oder „unable to import module“ beim Hochladen eines Lambda-Bereitstellungspakets?
- Stellen Sie sicher, dass der Name und die Konfiguration des Lambda-Funktions-Handlers gültig sind.
- Wenn die Lambda-Ausführung während der Laufzeit fehlschlägt, überprüfen Sie die Lambda-Funktionsprotokolle und aktualisieren Sie den Code.
- Testen Sie Ihre REST-API-Methode in der API Gateway-Konsole.
Beispiel: Node.js-Lambda-Funktion mit korrekt formatierter Antwort
Hinweis: Node.js-Lambda-Funktionen unterstützen asynchrone Handler und nicht-asynchrone Handler. Die folgende Beispielfunktion verwendet einen asynchronen Handler.
exports.handler = async (event) => { const responseBody = { "key3": "value3", "key2": "value2", "key1": "value1" }; const response = { "statusCode": 200, "headers": { "my_header": "my_value" }, "body": JSON.stringify(responseBody), "isBase64Encoded": false }; return response; };
Diese Beispielantwort enthält vier Felder:
- statusCode ist eine von API Gateway interpretierte Ganzzahl, die an den Aufrufer der API-Methode zurückgegeben wird.
- headers werden gesammelt und dann mit der Antwort von API Gateway zurückgesendet.
- body muss in eine Zeichenfolge konvertiert werden, wenn Sie Daten als JSON zurückgeben.
Hinweis: Sie können JSON.stringify verwenden, um dies in Node.js-Funktionen zu handhaben. Andere Laufzeiten erfordern andere Lösungen, aber das Prinzip ist das gleiche. - isBase64Encoded ist ein erforderliches Feld, wenn Sie mit Binärdaten arbeiten. Wenn Sie dieses Feld nicht verwenden, empfiehlt es sich, den Wert auf FALSE zu setzen.
Verwandte Informationen
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Monat
- AWS OFFICIALAktualisiert vor 7 Monaten
- AWS OFFICIALAktualisiert vor 2 Monaten