J'ai créé une API API Gateway avec intégration Lambda en utilisant AWS CloudFormation ou OpenAPI (Swagger). Pourquoi l'erreur générique « Execution failed due to configuration » (Échec de l'exécution en raison de la configuration) et le code de statut 500 sont-ils émis lorsque j'essaie d'appeler la méthode d'API ?

Date de la dernière mise à jour : 16/10/2019

J'ai utilisé un modèle AWS CloudFormation ou une définition OpenAPI (Swagger) pour créer une API Amazon API Gateway avec intégration AWS Lambda. Lorsque j'essaie d'appeler la méthode d'API, l'appel de ma fonction échoue et je reçois le message générique « Execution failed due to configuration » (Échec de l'exécution en raison de la configuration) et le code de statut 500. Quelle est l'origine de l'erreur ?

Brève description

Lorsque vous disposez d'API Gateway avec intégration Lambda, l'API doit appeler la fonction Lambda du serveur principal en utilisant la méthode HTTP POST. Si vous utilisez une autre méthode HTTP (comme ANY ou GET) pour la demande d'intégration au serveur principal, l'appel échoue, et vous recevez un message d'erreur similaire à celui-ci dans les journaux :

Mon Oct 14 14:08:49 UTC 2019 : Received response. Status: 403, Integration latency: 3 ms
Mon Oct 14 14:08:49 UTC 2019 : Endpoint response headers: {Date=Mon, 14 Oct 2019 14:08:49 GMT, Content-Length=130, Connection=keep-alive, x-amzn-RequestId=abc1d2ef-34ab-56c7-de8f-90123a456789}
Mon Oct 14 14:08:49 UTC 2019 : Endpoint response body before transformations: <AccessDeniedException>
<Message>Unable to determine service/operation name to be authorized</Message>
</AccessDeniedException>
Mon Oct 14 14:08:49 UTC 2019 : Lambda invocation failed with status: 403. Lambda request id: abc1d2ef-34ab-56c7-de8f-90123a456789
Mon Oct 14 14:08:49 UTC 2019 : Execution failed due to configuration error:
Mon Oct 14 14:08:49 UTC 2019 : Method completed with status: 500

Remarque : vous pouvez toujours configurer n'importe quelle méthode HTTP pour le serveur frontal de votre API.

Lorsque vous utilisez la console API Gateway pour configurer une intégration Lambda, elle définit automatiquement la demande au serveur principal comme POST. Cependant, vous devez spécifier vous-même la méthode POST lorsque vous créez une API avec intégration Lambda en utilisant un modèle CloudFormation, une définition OpenAPI ou de l' interface de ligne de commande AWS (AWS CLI).

Solution

Remplacez la méthode HTTP par POST pour la demande d'intégration au serveur principal en effectuant l'une des actions suivantes :

Utiliser la console API Gateway

  1. Dans la console API Gateway, choisissez votre API.
  2. Dans le volet Resources (Ressources), choisissez la méthode HTTP avec l'intégration Lambda.
  3. Dans le volet Method Execution (Exécution de la méthode), choisissez Integration Request (Demande d'intégration).
  4. Dans le volet Integration Request (Demande d'intégration), pour HTTP method (Méthode HTTP), choisissez POST, puis l'icône de coche (Update (Mettre à jour)).
  5. Déployez votre API.
  6. (Facultatif) Testez la méthode HTTP avec l'intégration Lambda.

Pour plus d'informations, consultez Créer API REST avec des intégrations Lambda dans Amazon API Gateway et Configurer une demande d'intégration d'API à l'aide de la console API Gateway.

Mettre à jour votre modèle AWS CloudFormation

Si vous avez créé votre API en utilisant un modèle CloudFormation, procédez comme suit :

  1. Mettez à jour le modèle, en affectant à la propriété IntegrationHttpMethod la valeur POST.
  2. Mettez à jour la pile AWS CloudFormation en utilisant le modèle. Cette action met à jour votre API.

Mettre à jour votre définition OpenAPI

Si vous avez créé votre API en utilisant une définition OpenAPI, procédez comme suit :

  1. Mettez à jour la définition d'API en affectant à la propriété httpMethod la valeur POST. Pour plus d'informations, consultez Objet x-amazon-apigateway-integration et l'exemple de modèle Swagger dans le référentiel GitHub aws-samples.
  2. Mettez à jour votre API en important le fichier de définition d'API mis à jour dans API Gateway.