it-swarm.com.de

"message": "Interner Serverfehler" Problem mit Lambda/API Gateway und iOS

Ich habe eine Lambda-Funktion eingerichtet und im API-Gateway einige GET- und POST -Methoden erstellt, die beim Testen in der Webanwendung einwandfrei zu funktionieren scheinen Anwendung, die über den Mobile Hub eingerichtet wird. Die Funktionen funktionieren auch innerhalb der Testeinrichtung über den Mobile Hub einwandfrei, wenn ich jedoch die Funktionen in der App teste, bekomme ich: 

"message" : "Internal server error"

Ich weiß, dass der Fehler nicht viel zu bearbeiten ist, aber ich kann keinen Weg finden, eine detailliertere Fehlerbeschreibung zu erhalten.

Irgendwelche Ideen?

7
user3599895

Dies kann passieren, weil Ihre Lambda-Funktion nicht so eingestellt ist, dass sie einen HTTP-Statuscode zurückgibt.

Ändern von

exports.handler = (event, context, callback) => {
    callback(null, 'Hello from Lambda');
};

zu

exports.handler = (event, context, callback) => {
    callback(null, { statusCode: 200, body: 'Hello from Lambda' });
};

Sollte das Problem beheben.

22

Der andere mögliche Grund könnten die Grenzwerte für Nutzlast/Anforderung/Antwort bei API-Gateway (10 MB) und/oder Lambda (6 MB) sein.

0
user2313617

Keine der obigen Antworten hat bei mir funktioniert. Ich hatte eine Erlaubnisfrage. Unten ist, wie ich es gelöst habe.

Kontext

Das ist meine Lambda-Funktion:

exports.handler = function(event, context, callback) {
  callback(null, {
    statusCode: '200',
    body: JSON.stringify({ 'message': 'hello world' }),
    headers: {
      'Content-Type': 'application/json',
    },
  });
};

Ich habe terraform verwendet, um API-Gateway und Lambda bereitzustellen. Ich habe den Beispielcode aus diesem Blog-Beitrag verwendet.

Diagnose

In der Lambda-Konsole habe ich ein Testereignis für meinen Lambda durchgeführt. Da mein Lambda sehr einfach war, habe ich die Hallo-Welt-Testvorlage mit dem Namen verwendet und sie gespeichert. Der Test kehrt erfolgreich zurück.

Ich habe die Cloudwatch-Protokolle überprüft, konnte aber nichts Nützliches finden. Ich bin neu bei AWS und war mir nicht sicher, ob ich etwas einrichten musste.

In der API-Gateway-Konsole habe ich ein Testereignis ausgeführt. Ich habe gerade Content-Type:application/json Zu den Überschriften der Veranstaltung hinzugefügt und den Test durchgeführt. Aus irgendeinem seltsamen Grund wurden die Testergebnisse auf der rechten Seite des Browsers angezeigt und mussten nach rechts gescrollt werden, um sie zu sehen.

Ich habe folgendes Ergebnis erhalten: Execution failed due to configuration error: Invalid permissions on Lambda function

[~ # ~] Lösung [~ # ~]

Ich habe das grundlegende Terraform-Beispiel für die API-Gateway- und Lambda-Integration überprüft hier und festgestellt, dass mir die Ressource aws_lambda_permission Fehlt. Dies ist erforderlich, um dem API-Gateway die Berechtigung zum Aufrufen der Lambda-Funktion zu erteilen.

Für diejenigen, die terraform nicht verwenden hier ist ein Link zu den aws-Dokumenten zum Erstellen der entsprechenden Berechtigungen.

0
codeinaire

Die JSON.stringify() hat mein Problem gelöst. Der response.body muss im String-Format vorliegen und nicht als JSON. Ich hoffe das hilft.

exports.sendRes = (body, status = 200) => {
    var response = {
        statusCode: status,
        headers: {
            "Content-Type": "application/json"
        },
        body: JSON.stringify(body)
    };
    return response;
};
0
Nikhil Manapure