Al usar AWS re:Post, aceptas las AWS re:Post Términos de uso

Definí mi integración de Lambda en API Gateway mediante una variable de etapa. ¿Por qué aparece un «error de servidor interno» y un código de estado 500 cuando invoco el método de la API?

4 minutos de lectura
0

Configuré mi API Amazon API Gateway para invocar una función de AWS Lambda mediante una variable de etapa. Cuando invoco el método de la API, mi API devuelve un «error de servidor interno» y un código de estado 500. ¿Cómo soluciono el error?

Descripción breve

Si la política basada en recursos de la función de Lambda no incluye permisos para que la API invoque la función, API Gateway devuelve un mensaje de error interno del servidor.

Si crea una variable de etapa para llamar a una función a través de su API, debe añadir los permisos necesarios mediante una de las siguientes acciones:

**Nota:**Si crea una API de API Gateway con una integración de Lambda estándar mediante la consola de API Gateway, la consola añade los permisos necesarios automáticamente.

Resolución

Nota: Si recibe errores al ejecutar los comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de utilizar la versión más reciente de AWS CLI.

Revise sus registros de Amazon CloudWatch para confirmar que el error se debe a la falta de permisos

Para API de REST y API de WebSocket

Revise sus registros de ejecución de API Gateway. Si aparece un mensaje de error similar a Permisos no válidos en la función de Lambda, significa que la falta de permisos es la causa del error. Para obtener más información, consulte ¿Cómo activo los registros de CloudWatch para solucionar problemas con mi API de REST o API de WebSocket de API Gateway?

Para las API HTTP

Revise sus registros de acceso a API Gateway. Si aparece un mensaje de error que incluye Permisos inválidos, significa que la falta de permisos es la causa del error. Para obtener más información, consulte Configuración de registro para una API HTTP.

Nota: La variable de contexto integrationErrorMessage ($context.integrationErrorMessage) incluye el mensaje de error que se va a revisar.

Para actualizar la política de IAM basada en recursos de su función de Lambda para que conceda permiso de invocación a API Gateway

Instrucciones de la consola de Lambda

Siga las instrucciones que se indican en Concesión de acceso a las funciones a los servicios de AWS.

El siguiente es un ejemplo de política basada en recursos que otorga permisos de invocación a API Gateway:

{
    "Version": "2012-10-17",
    "Id": "default",
    "Statement": [
        {
            "Sid": "ServiceAllowListing",
            "Effect": "Allow",
            "Principal": {
              "Service": "apigateway.amazonaws.com"
            },
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:<AWS_Region>:<AWS_Account_Number>:function:<LambdaFunctionName>",
            "Condition": {
              "ArnLike": {
                "AWS:SourceArn": "arn:aws:execute-api:<AWS_Region>:<AWS_Account_Number>:<API_ID>"
              }
            }
        }
     ]
}

Instrucciones de AWS CLI

Ejecute el siguiente comando add-permission de AWS CLI:

Importante: Sustituya las siguientes variables antes de ejecutar el comando:

aws lambda add-permission --function-name arn:aws:lambda:region:account-id:function:function-name --statement-id statement-id-guid --action lambda:InvokeFunction --source-arn arn:aws:execute-api:region:account-id:api-id/*/GET/lambdasv1

Para crear un rol de IAM que API Gateway pueda asumir para invocar su función de Lambda

Siga las instrucciones de Modelo de permisos de API Gateway para invocar una API.

**Nota:**Para obtener más información, consulte Control del acceso a una API con permisos de IAM.


Información relacionada

Trabajar con etapas para API HTTP

Configuración de variables de etapa para un despliegue de una API de REST

Uso de variables de etapa de Amazon API Gateway

Uso de variables de etapa de API Gateway para administrar las funciones de Lambda

Desarrollo de una API de REST de API Gateway con integración de Lambda