Personnalisation de la sérialisation pour les fonctions Lambda Java - AWS Lambda

Personnalisation de la sérialisation pour les fonctions Lambda Java

Les environnements d’exécution gérés par Lambda Java prennent en charge la sérialisation personnalisée pour les événements JSON. La sérialisation personnalisée peut simplifier votre code et potentiellement améliorer les performances.

Cas d’utilisation de la sérialisation personnalisée

Lorsque votre fonction Lambda est invoquée, les données d’événement d’entrée doivent être désérialisées dans un objet Java, et la sortie de votre fonction doit être sérialisée à nouveau dans un format pouvant être renvoyé en tant que réponse de la fonction. Les environnements d’exécution gérés par Lambda Java fournissent des fonctionnalités de sérialisation et de désérialisation par défaut qui fonctionnent bien pour gérer les données utiles d’événements provenant de divers services AWS, tels qu’Amazon API Gateway et Amazon Simple Queue Service (Amazon SQS). Pour utiliser ces événements d’intégration de services dans votre fonction, ajoutez la dépendance aws-java-lambda-events à votre projet. Cette bibliothèque AWS contient des objets Java représentant ces événements d’intégration de services.

Vous pouvez également utiliser vos propres objets pour représenter l’événement JSON que vous transmettez à votre fonction Lambda. L’environnement d’exécution géré tente de sérialiser le JSON vers une nouvelle instance de votre objet avec son comportement par défaut. Si le sérialiseur par défaut n’a pas le comportement souhaité pour votre cas d’utilisation, utilisez la sérialisation personnalisée.

Par exemple, si votre gestionnaire de fonctions attend une classe Vehicle en entrée, avec la structure suivante :

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

Cependant, les données utiles de l’événement JSON ressemblent à ceci :

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

Dans ce scénario, la sérialisation par défaut dans l’environnement d’exécution géré s’attend à ce que les noms de propriété JSON correspondent au camel case des noms de propriété de classe Java (vehicleType, vehicleId). Dans la mesure où les noms des propriétés dans l’événement JSON ne sont pas écrits en camel case (vehicle-type,vehicleID), vous devez utiliser une sérialisation personnalisée.

Implémentation de sérialisation personnalisée

Utilisez une interface de fournisseur de services pour charger le sérialiseur de votre choix au lieu de la logique de sérialisation par défaut de l’environnement d’exécution géré. Vous pouvez sérialiser vos données utiles d’événements JSON directement dans des objets Java, à l’aide de l’interface standard RequestHandler.

Pour utiliser la sérialisation personnalisée dans votre fonction Lambda Java
  1. Ajoutez la bibliothèque aws-lambda-java-core en tant que dépendance. Cette bibliothèque inclut l’interface CustomPojoSerializer, ainsi que d’autres définitions d’interface permettant de travailler avec Java dans Lambda.

  2. Créez un fichier nommé com.amazonaws.services.lambda.runtime.CustomPojoSerializer dans votre répertoire src/main/META-INF/services/ de votre projet.

  3. Dans ce fichier, spécifiez le nom complet de votre implémentation de sérialiseur personnalisé, qui doit implémenter l’interface CustomPojoSerializer. Exemple :

    com.mycompany.vehicles.CustomLambdaSerialzer
  4. Implémentez l’interface CustomPojoSerializer pour fournir votre logique de sérialisation personnalisée.

  5. Utilisez l’interface standard RequestHandler de votre fonction Lambda. L’environnement d’exécution géré utilisera votre sérialiseur personnalisé.

Pour d’avantage d’exemples d’implémenation de la sérialisation personnalisée à l’aide de bibliothèques populaires telles que fastJson, Gson, Moshi et jackson-jr, consultez l’exemple custom-serialization dans le référentiel GitHub AWS.

Test de la sérialisation personnalisée

Testez votre fonction pour vous assurer que votre logique de sérialisation et de désérialisation fonctionne comme prévu. Vous pouvez utiliser l’interface de ligne de commande AWS Serverless Application Model (AWS SAM CLI) pour émuler l’invocation de vos données utiles Lambda. Cela peut vous aider à tester et à itérer rapidement votre fonction lorsque vous introduisez un sérialiseur personnalisé.

  1. Créez un fichier avec les données utiles de l’événement JSON avec lesquelles vous souhaitez invoquer votre fonction, puis appelez le AWS SAM CLI.

  2. Exécutez la commande sam local invoke pour invoquer votre fonction localement. Exemple :

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

Pour plus d’informations, consultez Locally invoke Lambda functions with AWS SAM.