Personalización de la serialización para las funciones Java de Lambda - AWS Lambda

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.

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 a su proyecto. Esta biblioteca de AWS contiene objetos de Java que representan estos eventos de integración de servicios.

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 servicios para cargar el serializador que elija en lugar de la lógica de serialización predeterminada del tiempo de ejecución administrado. Puede serializar las cargas útiles de eventos JSON directamente en objetos de Java mediante la interfaz RequestHandler estándar.

Uso de la serialización personalizada en la función Java de Lambda
  1. 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.

  2. Cree un archivo con el nombre com.amazonaws.services.lambda.runtime.CustomPojoSerializer en el directorio src/main/META-INF/services/ del proyecto.

  3. 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
  4. Implementa la interfaz CustomPojoSerializer para proporcionar la lógica de serialización personalizada.

  5. 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 en el repositorio de GitHub de AWS.

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.

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

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