Personalização da serialização para funções do Lambda em Java - AWS Lambda

Personalização da serialização para funções do Lambda em Java

Os runtimes gerenciados para Java do Lambda oferecem suporte para a serialização personalizada para eventos JSON. A serialização personalizada pode simplificar o código e, potencialmente, aumentar a performance.

Quando usar serialização personalizada

Quando a função do Lambda é invocada, os dados do evento de entrada precisam passar pela desserialização em um objeto em Java, e a saída da função precisa ser serializada novamente em um formato que possa ser retornado como resposta da função. Os runtimes gerenciados do Lambda para Java fornecem funcionalidades de serialização e desserialização padrão que funcionam bem para lidar com cargas úteis de eventos de vários serviços da AWS, como o Amazon API Gateway e o Amazon Simple Queue Service (Amazon SQS). Para trabalhar com esses eventos de integração de serviços em sua função, adicione a dependência aws-java-lambda-events ao seu projeto. Esta biblioteca da AWS contém objetos em Java que representam esses eventos de integração de serviços.

Você também pode usar seus próprios objetos para representar o JSON do evento que você fornece para a função do Lambda. O runtime gerenciado tenta serializar o JSON para uma nova instância do objeto com o comportamento padrão. Se o serializador padrão não apresentar o comportamento desejado para o seu caso de uso, utilize a serialização personalizada.

Por exemplo, suponha que o manipulador da sua função espera uma classe Vehicle como entrada, com a seguinte estrutura:

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

No entanto, a carga útil do evento JSON é semelhante a:

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

Neste caso, a serialização padrão no runtime gerenciado requer que os nomes das propriedades em JSON coincidam com os nomes das propriedades da classe Java em camel case (vehicleType e vehicleId). Como os nomes das propriedades no evento JSON não estão em camel case (vehicle-type e vehicleID), é necessário usar a serialização personalizada.

Implementação de serialização personalizada

Faça uso de uma interface de provedor de serviços para carregar um serializador de sua preferência, em vez de usar a lógica de serialização padrão do runtime gerenciado. É possível serializar as cargas úteis dos eventos JSON diretamente em objetos em Java ao usar a interface RequestHandler padrão.

Para usar a serialização personalizada em sua função do Lambda em Java
  1. Adicione a biblioteca aws-lambda-java-core como uma dependência. Esta biblioteca inclui a interface CustomPojoSerializer, juntamente com outras definições de interface para o uso com o Java no Lambda.

  2. Crie um arquivo chamado com.amazonaws.services.lambda.runtime.CustomPojoSerializer no diretório src/main/META-INF/services/ do seu projeto.

  3. Neste arquivo, especifique o nome totalmente qualificado da implementação de serializador personalizada, que deve implementar a interface CustomPojoSerializer. Exemplo:

    com.mycompany.vehicles.CustomLambdaSerialzer
  4. Implemente a interface CustomPojoSerializer para fornecer sua lógica de serialização personalizada.

  5. Use a interface RequestHandler padrão em sua função do Lambda. O runtime gerenciado usará o serializador personalizado.

Para obter mais exemplos de como implementar a serialização personalizada usando bibliotecas populares como fastJson, Gson, Moshi e jackson-jr, consulte o exemplo custom-serialization no repositório GitHub da AWS.

Teste da serialização personalizada

Teste sua função para garantir que sua lógica de serialização e desserialização esteja funcionando conforme o esperado. É possível usar a AWS Serverless Application Model Command Line Interface (AWS SAM CLI) para emular a invocação da carga útil da função do Lambda. Isso ajuda a testar e iterar rapidamente em sua função à medida que você implementa um serializador personalizado.

  1. Crie um arquivo com a carga útil do evento JSON que você deseja usar para invocar a função e, em seguida, chame a AWS SAM CLI.

  2. Execute o comando sam local invoke para invocar sua função localmente. Exemplo:

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

Para obter mais informações, consulte Locally invoke Lambda functions with AWS SAM.