Comment résoudre les erreurs HTTP 502 provenant des API REST d’API Gateway avec une intégration de proxy Lambda ?

Lecture de 4 minute(s)
0

J’ai configuré l’intégration de proxy pour Amazon API Gateway afin qu’elle fonctionne avec une fonction AWS Lambda. Lorsque j’appelle mon API REST, je reçois une erreur de configuration et un code de statut HTTP 502. Comment corriger cette erreur ?

Brève description

Lorsque les autorisations d’une fonction Lambda sont incorrectes ou que la réponse à la demande d’API n’est pas formatée correctement, API Gateway renvoie un code de statut HTTP 502.

Exemples de messages d’erreur HTTP 502 tels qu’ils apparaissent dans Amazon CloudWatch Logs

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

-ou-

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

Pour qu’API Gateway puisse traiter la réponse d’une fonction Lambda, cette dernière doit renvoyer la sortie au format JSON :

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

Pour en savoir plus, consultez la page Format de sortie d’une fonction Lambda pour l’intégration d’un proxy.

Résolution

1.    Consultez les métriques CloudWatch de votre API REST dans le tableau de bord API d’API Gateway.
-ou-
Consultez les événements du journal de votre API REST 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 auformat JSON requis, reformatez-la.

3.    Vérifiez si la stratégie de ressources de la fonction Lambda offre les autorisations nécessaires pour pouvoir invoquer la fonction avec API Gateway.

  1. Si l’exécution de la fonction Lambda échoue en raison d’un problème d’autorisation de package, vérifiez les autorisations. Vous trouverez des instructions à ce sujet sur la page Comment résoudre les erreurs « Autorisation refusée » ou « Unable to import module » lorsque je télécharge un package de déploiement Lambda ?

5.    Vérifiez que le nom et la configuration du gestionnaire de fonction Lambda sont valides.

6.    En cas d’échec de l’exécution de la fonction Lambda pendant l’exécution, vérifiez les journaux de la fonction Lambda et mettez le code à jour.

7.    Une fois les modifications apportées, testez votre méthode API REST dans la console API Gateway.

Exemple de fonction Lambda Node.js avec un format de réponse correct

Remarque : les fonctions Lambda Node.js prennent en charge les gestionnaires asynchrones et les gestionnaires non asynchrones. L’exemple de fonction suivant utilise un gestionnaire asynchrone.

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

Cet exemple de réponse contient quatre champs :

  • Le champ statusCode est un entier interprété par API Gateway qui est renvoyé à l’appelant de la méthode API.
  • Les valeurs dans headers sont collectées puis renvoyées avec la réponse d’API Gateway.
  • Le champ body doit être converti en chaîne si vous renvoyez les données au format JSON.
    Remarque : vous pouvez utiliserJSON.stringify pour gérer ce cela dans les fonctions Node.js. D’autres environnements d’exécution nécessitent des solutions différentes, mais le concept reste le même.
  • Le champ isBase64Encoded est obligatoire si vous travaillez avec des données binaires. Si vous n’utilisez pas ce champ, il est recommandé de définir la valeur sur FALSE.

Informations connexes

Configuration de la journalisation CloudWatch pour une API REST dans API Gateway

Surveillance des API REST avec les métriques Amazon CloudWatch

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans