Wie behebe ich HTTP-502-Fehler bei REST-APIs in API Gateway mit Lambda-Proxy-Integration?

Lesedauer: 3 Minute
0

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. Wie löse ich das Problem?

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

1.Ü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.

2.Ü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.

3.Stellen Sie sicher, dass die Ressourcenrichtlinie der Lambda-Funktion den Zugriff zum Aufruf der Funktion mit API Gateway ermöglicht.

4. 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 „Berechtigung verweigert“ oder „Modul kann nicht importiert werden“ beim Hochladen eines Lambda-Bereitstellungspakets?

5.Stellen Sie sicher, dass der Name und die Konfiguration des Lambda-Funktions-Handlers gültig sind.

6.Wenn die Lambda-Ausführung während der Laufzeit fehlschlägt, überprüfen Sie die Lambda-Funktionsprotokolle und aktualisieren Sie den Code.

7.Nachdem Sie die Änderungen vorgenommen haben, können Sie Ihre REST-API-Methode in der API-Gateway-Konsole testen.

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

Setting up CloudWatch logging for a REST API in API Gateway

Monitoring REST APIs with Amazon CloudWatch metrics

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren