J'ai configuré l'intégration proxy Amazon API Gateway pour fonctionner avec une fonction AWS Lambda. Lorsque je commande mon API, je reçois une erreur de configuration ou un code d'état 502. Comme résoudre ce problème ?

Le format de la réponse de la fonction Lambda est souvent la source de ces erreurs. Si le format constitue le problème, alors vous voyez un message comme celui-ci dans les journaux :

Thu Dec 08 01:13:00 UTC 2016 : Execution failed due to configuration error: Malformed Lambda proxy response
Thu Dec 08 01:13:00 UTC 2016 : Method completed with status: 502

Pour que la passerelle API puisse gérer la réponse d'une fonction Lambda, la réponse doit être JSON dans ce format :

{
    "isBase64Encoded": true|false,
    "statusCode": httpStatusCode,
    "headers": { "headerName": "headerValue", ... },
    "body": "..."
}
  1. Examinez la sortie de journalisation à partir de la console de passerelle API , ou affichez les événements de journalisation de la passerelle API dans la console Amazon CloudWatch.
  2. Dans les journaux, vérifiez le format de la réponse de votre fonction Lambda à votre API. Si la réponse n'est pas JSON dans le format approprié, reformatez-la.

Voici un exemple de fonction dans Node.js avec la réponse correctement formatée :

exports.handler = (event, context, callback) => {

    var responseBody = {
        "key3": "value3",
        "key2": "value2",
        "key1": "value1"
    };

    var response = {
        "statusCode": 200,
        "headers": {
            "my_header": "my_value"
        },
        "body": JSON.stringify(responseBody),
        "isBase64Encoded": false
    };
    callback(null, response);
};

Remarque : Si votre fonction est écrite dans un autre langage de programmation, reportez-vous à la référence de programmation de ce langage. Confirmez que la fonction renvoie une réponse dans le format approprié.

Dans cette réponse, se trouvent quatre champs : statusCode, en-têtes, corps et isBase64Encoded.

  • Le statusCode est un nombre entier interprété par la passerelle API qui est renvoyé au mandataire de la méthode API.
  • Les en-têtes sont collectées et renvoyées avec la réponse de la passerelle API.
  • Le champ corps, si vous restituez JSON, doit être converti en chaîne de caractères pour éviter tout autre problème avec la réponse. Vous pouvez utiliser JSON.stringify pour gérer cela dans les fonctions Node.js. D'autres environnements d'exécution nécessitent des solutions différentes, mais le concept est le même.
  • Le champ isBase64Encoded est important si vous travaillez avec des données binaires. Si vous n'utilisez pas cette zone, elle doit être définie sur la valeur booléenne de faux.

Cette page vous a-t-elle été utile ? Oui | Non

Retour au Centre de connaissances AWS Support

Vous avez besoin d'aide ? Consultez le site du Centre AWS Support

Date de publication : 16/10/2017

Date de mise à jour : 21/01/2019