¿Cuál es el "evento" de una función lambda de AWS y cómo envío uno a través de API Gateway?


7

Una función lambda de AWS tiene un "evento" y un "contexto" como en los parámetros. El "evento" es un objeto json.

Intento conectar una API (administrador a través de AWS API Gateway) a mi función lambda, enviando el json del evento como el cuerpo de una http POST. Esto falla miserablemente, y solo tengo alguna indicación de que podría haber un evento vacío enviado a la función lambda.

¿Cómo debo enviar el "evento" a través de la API?

Este es el código de mi función lambda:

from __future__ import print_function

import boto3
import json
import time

print('Loading function')

def lambda_handler(event, context):
    print("Received event: ")
    print(type(event))
    print(""+json.dumps(event, indent=2))

    id = event['Id']
    dynamo = boto3.resource('dynamodb').Table('Table1')
    dynamo.put_item( 
        Item = {
        'Button' : int(id),
        'Time' : int(time.time()),
    })
    return {
        'statusCode' : '400',
        'body' : null,
        'headers' : { 'Content-Type': 'application/json', },
    }

Al ejecutar una prueba en la función lambda se obtiene el siguiente registro:

START RequestId: x Version: $LATEST
Received event: 
<type 'dict'>
{
  "Id": "1"
}
END RequestId: x

y la respuesta

{
   "body": null,
   "headers": {
     "Content-Type": "application/json"
  },
  "statusCode": "400"
}

pero ejecutarlo a través de la función de prueba API Gateway da

Tue May 16 15:54:27 UTC 2017 : Endpoint response body before transformations: 
  {"stackTrace": [["/var/task/lambda_function.py", 12, "lambda_handler", 
   "id = event['Id']"]], "errorType": "KeyError", "errorMessage": "'Id'"}
Tue May 16 15:54:27 UTC 2017 : Endpoint response headers: 
  {x-amzn-Remapped-Content-Length=0, x-amzn-RequestId=x, 
   Connection=keep-alive, Content-Length=153,
   X-Amz-Function-Error=Unhandled, Date=Tue, 16 May 2017 15:54:27 GMT, 
   X-Amzn-Trace-Id=root=x;sampled=0, Content-Type=application/json}
Tue May 16 15:54:27 UTC 2017 : Execution failed due to configuration 
   error: Malformed Lambda proxy response
Tue May 16 15:54:27 UTC 2017 : Method completed with status: 502

2
Un mejor lugar para preguntar esto sería el sitio stackoverflow.
— bravokeyl

1
¿Cómo estás invocando la función Lambda? Habilite los registros de Cloudwatch para la API y verifique, también verifique los registros para la función lambda, que le dará una idea de lo que está mal.
— bravokeyl

Dices que tu esfuerzo de codificación no da el resultado deseado. Por favor, muestre el código.
— mico

@Bex KeyError significa que falta la clave 'Id' en el parámetro del evento. ¿Qué quieres decir con "ejecutarlo a través de la API Gateway" exactamente? Cometes el error de esa parte.
— mico

Muestra tu esfuerzo en esa parte también.
— mico

Respuestas:


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.