

# Solución de problemas con las integraciones de Lambda para API HTTP
<a name="http-api-troubleshooting-lambda"></a>

A continuación se proporcionan consejos para solucionar errores y problemas que puedan surgir al utilizar [AWS LambdaIntegraciones de ](http-api-develop-integrations-lambda.md) con API HTTP.

## Problema: mi API con una integración de Lambda devuelve `{"message":"Internal Server Error"}`
<a name="http-api-troubleshooting-lambda-internal-server-error"></a>

Para solucionar el error interno del servidor, agregue la [variable de registro](http-api-logging-variables.md) `$context.integrationErrorMessage` al formato de registro y vea sus registros de API HTTP. Para ello, haga lo siguiente:

**Para crear un grupo de registros a través de la Consola de administración de AWS**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Elija **Log groups (Grupos de registros)**.

1. Elija **Create log group (Crear grupo de registros)**.

1. Escriba un nombre de grupo de registros y, a continuación, elija **Create (Crear)**.

1. Anote el nombre de recurso de Amazon (ARN) de su grupo de registros. El formato ARN es arn:aws:logs: *region*: *account-id*:log-group:*log-group-name*. Necesita el ARN del grupo de registros para habilitar el registro de acceso a su API HTTP.

**Para agregar la variable de registro `$context.integrationErrorMessage`**

1. Inicie sesión en la consola de API Gateway, en [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Elija su API HTTP.

1. En **Monitorización**, elija **Registro**.

1. Seleccione una etapa de su API.

1. Elija **Edit (Editar)** y, a continuación, habilite el registro de acceso.

1. En **Log destination (Destino del registro)**, introduzca el ARN del grupo de registros que creó en el paso anterior.

1. En **Formato de registro**, elija **CLF**. API Gateway crea un formato de registro de ejemplo. 

1. Agregue `$context.integrationErrorMessage` al final del formato de registro.

1. Seleccione **Guardar**.

**Para ver los registros de la API**

1. Generación de registros. Utilice un navegador o `curl` para invocar su API.

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

1. Inicie sesión en la consola de API Gateway, en [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Elija su API HTTP.

1. En **Monitorización**, elija **Registro**.

1. Seleccione la etapa de la API para la cual habilitó el registro.

1. Elija **View logs in CloudWatch (Ver registros en CloudWatch)**.

1. Elija la última secuencia de registro para ver sus registros de API HTTP.

1. Su entrada de registro debe tener un aspecto similar a este:  
![\[Entrada de registro de CloudWatch Logs que muestra el mensaje de error de integración de Lambda.\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/troubleshoot-http-api-logs.png)

Dado que agregamos `$context.integrationErrorMessage` al formato de registro, vemos un mensaje de error en nuestros registros que resume el problema. 

Los registros pueden incluir un mensaje de error diferente que indica que hay un problema con el código de función de Lambda. En ese caso, verifique su código de función de Lambda y compruebe que su función de Lambda devuelva una respuesta en el [formato necesario](http-api-develop-integrations-lambda.md#http-api-develop-integrations-lambda.response). Si los registros no incluyen un mensaje de error, agregue `$context.error.message` y `$context.error.responseType` al formato de registro para obtener más información que le ayude a solucionar problemas.

En este caso, los registros muestran que API Gateway no tenía los permisos necesarios para invocar la función de Lambda.

Cuando crea una integración de Lambda en la consola de API Gateway, API Gateway configura automáticamente los permisos para invocar la función de Lambda. Cuando crea una integración de Lambda mediante la AWS CLI, CloudFormation o un SDK, debe conceder permisos para que API Gateway pueda invocar la función. Los siguientes comandos [add-permission](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html) conceden permiso para diferentes rutas de API HTTP para invocar una función de Lambda.

**Example Ejemplo: para la etapa `$default` y la ruta `$default` de una 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 Ejemplo: para la etapa `prod` y la ruta `test` de una 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 la política de la función](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html) en la pestaña **Permisos** de la consola de Lambda.

Intente volver a invocar su API. Debería ver la respuesta de su función de Lambda.