Personalizzare la serializzazione per le funzioni Lambda Java - AWS Lambda

Personalizzare la serializzazione per le funzioni Lambda Java

I runtime gestiti da Java di Lambda supportano la serializzazione personalizzata per gli eventi JSON. La serializzazione personalizzata può semplificare il codice e potenzialmente migliorare le prestazioni.

Quando usare la serializzazione personalizzata

Quando viene richiamata la funzione Lambda, i dati degli eventi di input devono essere deserializzati in un oggetto Java e l'output della funzione deve essere nuovamente serializzato in un formato che può essere restituito come risposta della funzione. I runtime gestiti da Java per Lambda forniscono funzionalità di serializzazione e deserializzazione predefinite che funzionano bene per la gestione dei payload di eventi da vari servizi AWS, come Gateway Amazon API e Amazon Simple Queue Service (Amazon SQS). Per utilizzare questi eventi di integrazione dei servizi nella tua funzione, aggiungi la dipendenza aws-java-lambda-events al tuo progetto. Questa libreria AWS contiene oggetti Java che rappresentano questi eventi di integrazione dei servizi.

Puoi anche usare i tuoi oggetti per rappresentare l'evento JSON che passi alla tua funzione Lambda. Il runtime gestito prova a serializzare il JSON su una nuova istanza dell'oggetto con il suo comportamento predefinito. Se il serializzatore predefinito non ha il comportamento desiderato per il tuo caso d'uso, usa la serializzazione personalizzata.

Supponiamo, ad esempio, che l'handler di funzioni si aspetti una classe Vehicle come input, con la seguente struttura:

public class Vehicle { private String vehicleType; private long vehicleId; }

Tuttavia, il payload dell'evento JSON ha il seguente aspetto:

{ "vehicle-type": "car", "vehicleID": 123 }

In questo scenario, la serializzazione predefinita nel runtime gestito prevede che i nomi delle proprietà JSON corrispondano ai nomi delle proprietà della classe Java con notazione a cammello (vehicleType, vehicleId). Poiché i nomi delle proprietà nell'evento JSON non sono in notazione a cammello (vehicle-type, vehicleID), è necessario utilizzare la serializzazione personalizzata.

Implementazione della serializzazione personalizzata

Utilizza un'interfaccia del provider di servizi per caricare un serializzatore di tua scelta anziché la logica di serializzazione predefinita del runtime gestito. È possibile serializzare i payload di eventi JSON direttamente in oggetti Java, utilizzando l'interfaccia RequestHandler standard.

Per utilizzare la serializzazione personalizzata nella funzione Java per Lambda
  1. Aggiungi la libreria aws-lambda-java-core come dipendenza. Questa libreria include l'interfaccia CustomPojoSerializer, insieme ad altre definizioni di interfaccia per lavorare con Java in Lambda.

  2. Crea un file denominato com.amazonaws.services.lambda.runtime.CustomPojoSerializer nella directory src/main/META-INF/services/ del progetto.

  3. In questo file, specifica il nome completo dell'implementazione del serializzatore personalizzato, che deve implementare l'interfaccia CustomPojoSerializer. Esempio:

    com.mycompany.vehicles.CustomLambdaSerialzer
  4. Implementa l'interfaccia CustomPojoSerializer per fornire la tua logica di serializzazione personalizzata.

  5. Usa l'interfaccia RequestHandler standard nella tua funzione Lambda. Il runtime gestito utilizzerà il serializzatore personalizzato.

Per altri esempi di come implementare la serializzazione personalizzata tramite le librerie comuni come fastJson, Gson, Moshi e jackson-jr, consulta l'esempio custom-serialization nel repository GitHub AWS.

Test della serializzazione personalizzata

Verifica la tua funzione per assicurarti che la logica di serializzazione e deserializzazione funzioni come previsto. È possibile utilizzare l'interfaccia a riga di comando AWS Serverless Application Model (AWS SAM CLI) per emulare l'invocazione del payload Lambda. Questo può aiutarti a testare e iterare rapidamente la tua funzione man mano che introduci un serializzatore personalizzato.

  1. Crea un file con il payload dell'evento JSON con cui desideri richiamare la tua funzione, quindi chiama la CLI AWS SAM.

  2. Esegui il comando sam local invoke per richiamare la tua funzione in locale. Esempio:

    sam local invoke -e src/test/resources/event.json

Per ulteriori informazioni, consulta Richiamare in locale le funzioni Lambda con AWS SAM.