

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Résolution des problèmes des API HTTP dans API Gateway
<a name="http-api-troubleshooting"></a>

Les rubriques suivantes fournissent des conseils de dépannage pour les erreurs et problèmes que vous pouvez rencontrer en utilisant des API HTTP.

**Topics**
+ [Résolution des problèmes liés aux intégrations Lambda d’API HTTP](http-api-troubleshooting-lambda.md)
+ [Résolution des problèmes liés aux mécanismes d’autorisation JWT pour les API HTTP](http-api-troubleshooting-jwt.md)

# Résolution des problèmes liés aux intégrations Lambda d’API HTTP
<a name="http-api-troubleshooting-lambda"></a>

Vous trouverez ci-dessous des conseils de résolution des erreurs et des problèmes que vous pourriez rencontrer lors de l'utilisation [AWS Lambda intégrations](http-api-develop-integrations-lambda.md) du protocole HTTP APIs.

## Problème : Mon API avec une intégration Lambda renvoie `{"message":"Internal Server Error"}`
<a name="http-api-troubleshooting-lambda-internal-server-error"></a>

Pour résoudre l’erreur interne du serveur, ajoutez la [variable de journalisation](http-api-logging-variables.md) `$context.integrationErrorMessage` à votre format de journal et affichez vos journaux d’API HTTP. Pour ce faire, procédez comme suit :

**Pour créer un groupe de journaux à l'aide du AWS Management Console**

1. Ouvrez la CloudWatch console à l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Choisissez **Groupes de journaux**.

1. Sélectionnez **Créer un groupe de journaux**.

1. Saisissez un nom de groupe de journaux, puis choisissez **Créer**.

1. Notez l’Amazon Resource Name (ARN) de votre groupe de journaux. Le format ARN est arn:aws:logs : ::log-group :. *region* *account-id* *log-group-name* Vous avez besoin de l’ARN du groupe de journaux pour activer la journalisation de l’accès pour votre API HTTP.

**Pour ajouter la variable de journalisation `$context.integrationErrorMessage`**

1. Connectez-vous à la console API Gateway à l'adresse [https://console.aws.amazon.com/apigateway.](https://console.aws.amazon.com/apigateway)

1. Choisissez votre API HTTP.

1. Sous **Moniteur**, choisissez **Journalisation**.

1. Sélectionnez une étape de votre API.

1. Choisissez **Modifier**, puis activez la journalisation des accès.

1. Pour **Destination du journal**, saisissez l’ARN du groupe de journaux que vous avez créé à l’étape précédente.

1. Pour **Format de journal**, choisissez **CLF**. API Gateway crée un exemple de format de journal. 

1. Ajouter `$context.integrationErrorMessage` à la fin du format de journal.

1. Choisissez **Enregistrer**.

**Pour afficher les journaux de votre API**

1. Génération de journaux Utilisez un navigateur ou `curl` pour appeler votre API.

   ```
   $curl https://api-id.execute-api.us-west-2.amazonaws.com/route
   ```

1. Connectez-vous à la console API Gateway à l'adresse [https://console.aws.amazon.com/apigateway.](https://console.aws.amazon.com/apigateway)

1. Choisissez votre API HTTP.

1. Sous **Moniteur**, choisissez **Journalisation**.

1. Sélectionnez l’étape de votre API pour laquelle vous avez activé la journalisation.

1. Choisissez **Afficher les connexions CloudWatch**.

1. Choisissez le dernier flux de journaux pour afficher vos journaux d’API HTTP.

1. Votre entrée de journal doit ressembler à la suivante :  
![\[CloudWatch Enregistre une entrée du journal indiquant le message d'erreur d'intégration envoyé par Lambda.\]](http://docs.aws.amazon.com/fr_fr/apigateway/latest/developerguide/images/troubleshoot-http-api-logs.png)

Comme nous avons ajouté `$context.integrationErrorMessage` au format de journal, nous voyons un message d’erreur dans nos journaux qui résume le problème. 

Vos journaux peuvent inclure un autre message d’erreur indiquant l’existence d’un problème avec votre code de fonction Lambda. Dans ce cas, vérifiez votre code de fonction Lambda et assurez-vous que votre fonction Lambda renvoie une réponse au [format requis](http-api-develop-integrations-lambda.md#http-api-develop-integrations-lambda.response). Si vos journaux n’incluent pas de message d’erreur, ajoutez `$context.error.message` et `$context.error.responseType` à votre format de journal pour plus d’informations pour vous aider à résoudre les problèmes.

Si c’est le cas, les journaux montrent qu’API Gateway ne disposait pas des autorisations requises pour appeler la fonction Lambda.

Lorsque vous créez une intégration Lambda dans la console API Gateway, API Gateway configure automatiquement les autorisations pour appeler la fonction Lambda. Lorsque vous créez une intégration Lambda à l'aide du AWS CLI CloudFormation, ou d'un SDK, vous devez autoriser API Gateway à appeler la fonction. Les commandes [add-permission](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html) suivantes autorisent différentes routes d’API HTTP à invoquer une fonction Lambda.

**Example Exemple : pour l’étape `$default` et la route `$default` d’une API HTTP**  

```
aws lambda add-permission \
    --function-name my-function \
    --statement-id apigateway-invoke-permissions \
    --action lambda:InvokeFunction \
    --principal apigateway.amazonaws.com \
    --source-arn "arn:aws:execute-api:us-west-2:123456789012:api-id/\$default/\$default"
```

**Example Exemple : pour l’étape `prod` et la route `test` d’une API HTTP**  

```
aws lambda add-permission \
    --function-name my-function \
    --statement-id apigateway-invoke-permissions \
    --action lambda:InvokeFunction \
    --principal apigateway.amazonaws.com \
    --source-arn "arn:aws:execute-api:us-west-2:123456789012:api-id/prod/*/test"
```

[Vérifiez la politique de fonction](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html) dans l’onglet **Permissions (Autorisations)** de la console Lambda.

Essayez à nouveau d’appeler votre API. Vous devriez voir la réponse de votre fonction Lambda.

# Résolution des problèmes liés aux mécanismes d’autorisation JWT pour les API HTTP
<a name="http-api-troubleshooting-jwt"></a>

Vous trouverez ci-dessous des conseils de résolution des erreurs et des problèmes que vous pourriez rencontrer lors de l'utilisation des autorisateurs JSON Web Token (JWT) avec HTTP. APIs

## Problème : Mon API renvoie `401 {"message":"Unauthorized"}`
<a name="http-api-troubleshooting-jwt.unauthorized"></a>

Vérifiez l’en-tête `www-authenticate` dans la réponse de l’API.

La commande suivante utilise `curl` pour envoyer une demande à une API avec un mécanisme d’autorisation JWT qui utilise `$request.header.Authorization` comme source d’identité.

```
$curl -v -H "Authorization: token" https://api-id.execute-api.us-west-2.amazonaws.com/route
```

La réponse de l’API inclut un en-tête `www-authenticate`.

```
...
< HTTP/1.1 401 Unauthorized
< Date: Wed, 13 May 2020 04:07:30 GMT
< Content-Length: 26
< Connection: keep-alive
< www-authenticate: Bearer scope="" error="invalid_token" error_description="the token does not have a valid audience"
< apigw-requestid: Mc7UVioPPHcEKPA=
<
* Connection #0 to host api-id.execute-api.us-west-2.amazonaws.com left intact
{"message":"Unauthorized"}}
```

Dans ce cas, l’en-tête `www-authenticate` indique que le jeton n’a pas été émis pour un public ciblé approprié. Pour qu’API Gateway autorise une demande, la demande `aud` ou `client_id` de JWT doit correspondre à l’une des entrées de public ciblé configurées pour le mécanisme d’autorisation. API Gateway ne valide `client_id` que si `aud` n’est pas présent. Si `aud` et `client_id` sont présents, API Gateway évalue `aud`. 

Vous pouvez également décoder un JWT et vérifier qu’il correspond à l’émetteur, au public ciblé et aux portées dont votre API a besoin. Le site Web [jwt.io](https://jwt.io/) peut être JWTs débogué dans le navigateur. L'OpenID Foundation tient à jour une [liste de bibliothèques avec lesquelles travailler](https://openid.net/developers/jwt-jws-jwe-jwk-and-jwa-implementations/). JWTs 

Pour plus d’informations sur les mécanismes d’autorisation JWT, consultez [Contrôlez l'accès au HTTP APIs avec les autorisateurs JWT dans API Gateway](http-api-jwt-authorizer.md).