Solución de problemas con las integraciones de HTTP API Lambda - Amazon API Gateway

Solución de problemas con las integraciones de HTTP API Lambda

A continuación se le proporcionan consejos para solucionar errores y problemas que puedan surgir al utilizar AWS LambdaIntegraciones de con API HTTP.

Problema: mi API con una integración de Lambda devuelve {"message":"Internal Server Error"}

Para solucionar el error interno del servidor, agregue la variable de registro $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 AWS Management Console
  1. Abra la consola de CloudWatch en https://console.aws.amazon.com/cloudwatch/.

  2. Elija Log groups (Grupos de registros).

  3. Elija Create log group (Crear grupo de registros).

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

  5. 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.

  2. Elija su API HTTP.

  3. En Monitor (Monitorización), elija Logging (Registro).

  4. Seleccione una etapa de su API.

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

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

  7. En Log format (Formato de registro), elija CLF. API Gateway crea un formato de registro de ejemplo.

  8. Agregue $context.integrationErrorMessage al final del formato de registro.

  9. Seleccione Save.

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
  2. Inicie sesión en la consola de API Gateway en https://console.aws.amazon.com/apigateway.

  3. Elija su API HTTP.

  4. En Monitor (Monitorización), elija Logging (Registro).

  5. Seleccione la etapa de su API para la que habilitó el registro.

  6. Elija View logs in CloudWatch (Ver registros en CloudWatch).

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

  8. 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.

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. 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, AWS CloudFormation o un SDK, debe conceder permisos para que API Gateway pueda invocar la función. Los siguientes comandos de la AWS CLI de ejemplo conceden permiso para diferentes rutas de API HTTP para invocar una función de Lambda.

ejemplo 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"
ejemplo 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 en la pestaña Permissions (Permisos) de la consola de Lambda.

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