

# Solução de problemas com integrações do Lambda para APIs HTTP
<a name="http-api-troubleshooting-lambda"></a>

O tópico a seguir fornece orientações para a solução de erros e problemas que podem ser encontrados durante o uso de [AWS LambdaIntegrações do ](http-api-develop-integrations-lambda.md) com APIs HTTP.

## Problema: minha API com uma integração do Lambda retorna `{"message":"Internal Server Error"}`
<a name="http-api-troubleshooting-lambda-internal-server-error"></a>

Para solucionar o erro interno do servidor, adicione a `$context.integrationErrorMessage` [variável de registro em log](http-api-logging-variables.md) ao formato de log e visualize os logs da API HTTP. Para conseguir isso, faça o seguinte:

**Como criar um grupo de logs usando o Console de gerenciamento da AWS**

1. Abra o console do CloudWatch em [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Escolha **Grupos de logs**.

1. Escolha **Criar grupo de logs**.

1. Insira um nome para o grupo de logs e escolha **Criar**.

1. Anote o nome de recurso da Amazon (ARN) do grupo de logs. O formato do ARN é arn:aws:logs:*region*: *account-id*:log-group:*log-group-name*. O ARN do grupo de logs é necessário para habilitar o registro de acesso em logs para a API HTTP.

**Como adicionar a variável de registro em log `$context.integrationErrorMessage`**

1. Inicie uma sessão no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Escolha sua API HTTP.

1. Em **Monitor**, escolha **Registro em log**.

1. Selecione um estágio da API.

1. Escolha **Editar** e habilite o registro de acesso em logs.

1. Para o **destino do log**, insira o ARN do grupo de log que você criou na etapa anterior.

1. Em **Formato de log**, escolha **CLF**. O API Gateway cria um exemplo de formato de log. 

1. Adicione `$context.integrationErrorMessage` ao final do formato de log.

1. Escolha **Save** (Salvar).

**Como visualizar os logs da API**

1. Gere os logs. Use um navegador ou `curl` para invocar a API.

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

1. Inicie uma sessão no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Escolha sua API HTTP.

1. Em **Monitor**, escolha **Registro em log**.

1. Selecione o estágio da API para o qual você habilitou o registro em log.

1. Escolha **View logs in CloudWatch (Exibir logs no CloudWatch)**.

1. Escolha o stream de logs mais recente para visualizar os logs da API HTTP.

1. A entrada de log deve ser semelhante à seguinte:  
![\[Entrada de log do CloudWatch Logs mostrando a mensagem de erro de integração do Lambda.\]](http://docs.aws.amazon.com/pt_br/apigateway/latest/developerguide/images/troubleshoot-http-api-logs.png)

Como adicionamos `$context.integrationErrorMessage` ao formato de log, vemos uma mensagem de erro nos logs que resume o problema. 

Os logs podem incluir uma mensagem de erro diferente que indica que há um problema com o código de função do Lambda. Nesse caso, confira o código de função do Lambda e verifique se a função do Lambda retorna uma resposta no [formato necessário](http-api-develop-integrations-lambda.md#http-api-develop-integrations-lambda.response). Se os logs não incluírem uma mensagem de erro, adicione `$context.error.message` e `$context.error.responseType` ao seu formato de log para obter mais informações para ajudar a solucionar problemas.

Nesse caso, os logs mostram que o API Gateway não tinham as permissões necessárias para invocar a função do Lambda.

Quando você cria uma integração do Lambda no console do API Gateway, este configura automaticamente as permissões para invocar a função do Lambda. Ao criar uma integração do Lambda usando a AWS CLI, CloudFormation ou um SDK, você deve conceder permissões para o API Gateway invocar a função. Os comandos [add-permission](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html) indicados abaixo concedem permissões para possibilitar que diferentes rotas da API HTTP invoquem uma função do Lambda.

**Example Exemplo: para o estágio `$default` e a rota `$default` de uma 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 Exemplo: para o estágio `prod` e a rota `test` de uma 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"
```

[Confirme a política de função](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html) na guia **Permissions (Permissões)** do console do Lambda.

Tente invocar a API novamente. Você deverá ver a resposta da função do Lambda.