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

La source de ces erreurs est généralement le format de la réponse de la fonction Lambda. Pour vérifier le format de votre réponse, examinez la sortie de consignation de la console Amazon API Gateway ou les journaux d'API Gateway dans Amazon CloudWatch. Pour en savoir plus, consultez Comment activer Amazon CloudWatch Logs pour les API que j'ai créées dans Amazon API Gateway ?

Si le format de la réponse du proxy est la source du problème, le message suivant apparaîtra dans les journaux d'API Gateway :

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 résoudre ce problème, modifiez le type de réponse de votre fonction Lambda à votre API. 

Pour que la réponse d'une fonction Lambda soit traitée par API Gateway, elle doit prendre la forme suivante :

{
    "isBase64Encoded": true|false,
    "statusCode": httpStatusCode,
    "headers": { "headerName": "headerValue", ... },
    "body": "..."
}

La fonction suivante est un exemple au sein de Node.js :

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);
};

Dans cet exemple, la réponse de la fonction est au format attendu par API Gateway. Pour en savoir plus, consultez Format de sortie d'une fonction Lambda pour l'intégration du proxy.

Remarque : dans cette réponse, il existe quatre champs : statusCode, en-têtes, corps et isBase64Encoded.

  • statusCode est un entier interprété par l'API Gateway renvoyé au mandataire de la méthode API.
  • Les en-têtes sont collectés et renvoyés avec la réponse de l'API Gateway.
  • Le champ corps, si vous renvoyez en JSON, doit être converti en chaîne, sinon il posera d'autres problèmes dans le cadre de la réponse. Vous pouvez utiliser JSON.stringify pour traiter cela dans les fonctions Node.js : d'autres exécutions nécessiteront des solutions différentes, mais le concept est le même.
  • Le champ isBase64Encoded est important si vous utilisez des données binaires : si vous n'utilisez pas ce champ, il doit être défini sur la valeur booléenne False.

Lors de la rédaction d'une fonction Lambda fonctionnant avec un proxy simple API Gateway, la réponse doit être sous JSON au format indiqué et le contenu du champ corps doit faire l'objet d'un échappement adéquat.


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 : 02/04/2018