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.
Rubriques
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
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 fournisseurRequestHandler
.
Pour utiliser la sérialisation personnalisée dans votre fonction Lambda Java
-
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. -
Créez un fichier nommé
com.amazonaws.services.lambda.runtime.CustomPojoSerializer
dans votre répertoiresrc/main/META-INF/services/
de votre projet. -
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
-
Implémentez l’interface
CustomPojoSerializer
pour fournir votre logique de sérialisation personnalisée. -
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
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é.
-
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.
-
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.