

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Risoluzione dei problemi con le API HTTP in Gateway API
<a name="http-api-troubleshooting"></a>

Negli argomenti seguenti vengono forniti suggerimenti per la risoluzione dei problemi relativi a errori e problemi che potrebbero verificarsi durante l'utilizzo di API HTTP.

**Topics**
+ [Risoluzione dei problemi relativi alle integrazione Lambda di API HTTP](http-api-troubleshooting-lambda.md)
+ [Risoluzione dei problemi relativi ai provider di autorizzazioni JWT per API HTTP](http-api-troubleshooting-jwt.md)

# Risoluzione dei problemi relativi alle integrazione Lambda di API HTTP
<a name="http-api-troubleshooting-lambda"></a>

Di seguito vengono forniti consigli per la risoluzione di errori e problemi che potrebbero verificarsi durante l'utilizzo [AWS Lambda integrazioni](http-api-develop-integrations-lambda.md) con HTTP APIs.

## Problema: la mia API con un'integrazione Lambda restituisce `{"message":"Internal Server Error"}`
<a name="http-api-troubleshooting-lambda-internal-server-error"></a>

Per risolvere l'errore interno del server, aggiungere la `$context.integrationErrorMessage` [variabile di registrazione](http-api-logging-variables.md) al formato di registro e visualizzare i registri dell'API HTTP. Per raggiungere questo obiettivo, effettuare le seguenti operazioni:

**Per creare un gruppo di log utilizzando Console di gestione AWS**

1. Aprire la CloudWatch console all'indirizzo [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Scegliere **Gruppi di log**.

1. Scegliere **Crea gruppo di log**.

1. Immettere un nome di gruppo di log, quindi scegliere **Crea**.

1. Prendere nota del nome risorsa Amazon (ARN) per il tuo gruppo di log. Il formato ARN è arn:aws:logs: :log-group:. *region* *account-id* *log-group-name* È necessario il gruppo di log ARN per abilitare la registrazione degli accessi per la propria API HTTP.

**Per aggiungere la variabile di registrazione `$context.integrationErrorMessage`**

1. Accedi alla console API Gateway all'indirizzo [https://console.aws.amazon.com/apigateway.](https://console.aws.amazon.com/apigateway)

1. Scegliere l'API HTTP.

1. In **Monitor (Monitora)**, scegliere **Logging (Registrazione)**.

1. Selezionare una fase della tua API.

1. Scegliere **Modifica**, quindi abilitare la registrazione degli accessi.

1. Per **Log destination (Destinazione dei log)**, immettere l'ARN per il gruppo di log creato nel passaggio precedente.

1. Per **Formato registro**, scegliere **CLF**. Gateway API crea un formato di log di esempio. 

1. Aggiungere `$context.integrationErrorMessage` alla fine del formato di registro.

1. Selezionare **Salva**.

**Per visualizzare i log delle API**

1. Generare i log Utilizzare un browser o `curl` per richiamare la tua API.

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

1. Accedi alla console API Gateway all'indirizzo [https://console.aws.amazon.com/apigateway.](https://console.aws.amazon.com/apigateway)

1. Scegliere l'API HTTP.

1. In **Monitor (Monitora)**, scegliere **Logging (Registrazione)**.

1. Selezionare la fase dell'API per la quale è stata abilitata la registrazione.

1. **Scegli Visualizza i log in. CloudWatch**

1. Scegliere il flusso di log più recente per visualizzare i log dell'API HTTP.

1. La voce di registro dovrebbe essere simile alla seguente:  
![\[CloudWatch Registra la voce del registro che mostra il messaggio di errore di integrazione di Lambda.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/troubleshoot-http-api-logs.png)

Poiché è stato aggiunto `$context.integrationErrorMessage` al formato di registro, viene visualizzato un messaggio di errore nei nostri registri che riassume il problema. 

I registri potrebbero includere un messaggio di errore diverso che indica che si è verificato un problema con il codice della funzione Lambda. In tal caso, controllare il codice della funzione Lambda e verificare che la funzione Lambda restituisca una risposta nel [formato richiesto](http-api-develop-integrations-lambda.md#http-api-develop-integrations-lambda.response). Se i log non includono messaggi di errore, aggiungere `$context.error.message` e `$context.error.responseType` al formato del log per ottenere ulteriori informazioni per la risoluzione dei problemi.

In questo caso, i registri mostrano che API Gateway non disponeva delle autorizzazioni necessarie per richiamare la funzione Lambda.

Quando si crea un'integrazione Lambda nella console API Gateway, le autorizzazioni vengono configurate automaticamente per richiamare la funzione Lambda. Quando crei un'integrazione Lambda utilizzando, o un SDK AWS CLI CloudFormation, devi concedere le autorizzazioni ad API Gateway per richiamare la funzione. I comandi [add-permission](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html) seguenti forniscono l’autorizzazione a diversi instradamenti di API HTTP per invocare una funzione Lambda.

**Example Esempio: per la fase `$default` e l'instradamento `$default` di un'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 Esempio: per la fase `prod` e l'instradamento `test` di un'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"
```

[Conferma la policy della funzione](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html) nella scheda **Permissions (Autorizzazioni)** della console Lambda.

Prova a richiamare nuovamente la tua API. Deve essere visualizzata la risposta della funzione Lambda.

# Risoluzione dei problemi relativi ai provider di autorizzazioni JWT per API HTTP
<a name="http-api-troubleshooting-jwt"></a>

Di seguito vengono forniti consigli per la risoluzione di errori e problemi che potrebbero verificarsi durante l'utilizzo di autorizzatori JSON Web Token (JWT) con HTTP. APIs

## Problema: la mia API restituisce `401 {"message":"Unauthorized"}`
<a name="http-api-troubleshooting-jwt.unauthorized"></a>

Controlla l'intestazione `www-authenticate` nella risposta dell'API.

Il comando seguente utilizza `curl` per inviare una richiesta a un'API con un autorizzatore JWT che utilizza `$request.header.Authorization` come origine identità.

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

La risposta dell'API include un'intestazione `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"}}
```

In questo caso, l'intestazione `www-authenticate` mostra che il token non è stato emesso per un pubblico valido. Per consentire ad API Gateway di autorizzare una richiesta, la richiesta `aud` o `client_id` di JWT deve corrispondere a una delle voci destinatario configurate per il provider di autorizzazioni. Gateway API convalida `client_id` solo se `aud` non è presente. Quando `aud` e `client_id` sono entrambi presenti, Gateway API valuta `aud`. 

Puoi anche decodificare un JWT e verificare che corrisponda all'emittente, al pubblico e agli ambiti richiesti dall'API. Il sito web [jwt.io](https://jwt.io/) può eseguire il debug nel browser. JWTs La OpenID Foundation mantiene un [elenco di librerie con cui lavorare](https://openid.net/developers/jwt-jws-jwe-jwk-and-jwa-implementations/). JWTs 

Per ulteriori informazioni sui provider di autorizzazioni JWT, consulta [Controlla l'accesso a HTTP APIs con gli autorizzatori JWT in API Gateway](http-api-jwt-authorizer.md).