Personalización de la serialización para las funciones Java de Lambda
Los tiempos de ejecución administrados por Java de Lambda admiten la serialización personalizada para eventos JSON. La serialización personalizada puede simplificar el código y, potencialmente, mejorar el rendimiento.
Temas
Cuándo se usa la serialización personalizada
Cuando se invoca la función de Lambda, los datos del evento de entrada deben deserializarse en un objeto de Java y la salida de la función debe volver a serializarse en un formato que pueda devolverse como respuesta de la función. Los tiempos de ejecución administrados por Java de Lambda proporcionan capacidades de serialización y deserialización predeterminadas que funcionan bien para gestionar las cargas útiles de eventos de varios servicios de AWS, como Amazon API Gateway y Amazon Simple Queue Service (Amazon SQS). Para trabajar con estos eventos de integración de servicios en la función, agregue la dependencia aws-java-lambda-events
También puede usar sus propios objetos para representar el evento JSON que pasa a la función de Lambda. El tiempo de ejecución administrado intenta serializar el JSON en una nueva instancia del objeto con su comportamiento predeterminado. Si el serializador predeterminado no tiene el comportamiento deseado para el caso de uso, use la serialización personalizada.
Por ejemplo, supongamos que su controlador de funciones espera una clase Vehicle
como entrada, con la siguiente estructura:
public class Vehicle { private String vehicleType; private long vehicleId; }
Sin embargo, la carga útil del evento JSON tiene este aspecto:
{ "vehicle-type": "car", "vehicleID": 123 }
En este escenario, la serialización predeterminada en el tiempo de ejecución administrado espera que los nombres de las propiedades de JSON coincidan con los nombres de propiedad de las clases de Java en mayúsculas y minúsculas (vehicleType
, vehicleId
). Como los nombres de las propiedades del evento JSON no usan el formato camelCase (vehicle-type
,vehicleID
), debe usar una serialización personalizada.
Implementación de una serialización personalizada
Utilice una interfaz del proveedor de serviciosRequestHandler
estándar.
Uso de la serialización personalizada en la función Java de Lambda
-
Agregue la biblioteca aws-lambda-java-core
como una dependencia. Esta biblioteca incluye la interfaz CustomPojoSerializer , junto con otras definiciones de interfaz para trabajar con Java en Lambda. -
Cree un archivo con el nombre
com.amazonaws.services.lambda.runtime.CustomPojoSerializer
en el directoriosrc/main/META-INF/services/
del proyecto. -
En este archivo, especifique el nombre completo de la implementación del serializador personalizado, que debe implementar la interfaz
CustomPojoSerializer
. Ejemplo:com.mycompany.vehicles.CustomLambdaSerialzer
-
Implementa la interfaz
CustomPojoSerializer
para proporcionar la lógica de serialización personalizada. -
Utiliza la interfaz
RequestHandler
estándar de la función de Lambda. El tiempo de ejecución administrado utilizará su serializador personalizado.
Para obtener más ejemplos de cómo implementar la serialización personalizada con bibliotecas populares como fastJson, Gson, Moshi y jackson-jr, consulte la muestra custom-serialization
Prueba de la serialización personalizada
Pruebe la función para asegurarse de que la lógica de serialización y deserialización funcione según lo esperado. Puede utilizar la Interfaz de la línea de comandos de AWS Serverless Application Model comandos (CLI de AWS SAM) para emular la invocación de la carga útil de Lambda. Esto puede ayudarle a probar e iterar rápidamente su función a medida que ingresa un serializador personalizado.
-
Cree un archivo con la carga útil del evento JSON con la que desea invocar la función y, a continuación, llame a la CLI de AWS SAM.
-
Ejecute el comando sam local invoke para invocar la función localmente. Ejemplo:
sam local invoke -e src/test/resources/event.json
Para obtener más información, consulte Locally invoke Lambda functions with AWS SAM.