AWS Lambda
Guia do desenvolvedor

Aproveitar interfaces predefinidas para criar handler (Java)

Você pode usar uma das interfaces predefinidas fornecidas pela biblioteca principal Java do AWS Lambda (aws-lambda-java-core) para criar o handler da função Lambda como uma alternativa para escrever seu próprio método de handler com um nome arbitrário e parâmetros. Para obter mais informações sobre handlers, consulte Manipulador de função do AWS Lambda no Java.

Você pode implementar uma das interfaces predefinidas, RequestStreamHandler ou RequestHandler, e fornecer implementação para o método handleRequest que a interface oferece. A escolha a interface a ser implementada depende de você usar tipos Java padrão ou tipos de POJO personalizados para a entrada/saída do handler (o AWS Lambda serializa e desserializa automaticamente a entrada e a saída para corresponder ao seu tipo de dados) ou personalizar a serialização usando o tipo Stream.

nota

Essas interfaces estão disponíveis na biblioteca aws-lambda-java-core.

Quando você implementa interfaces padrão, elas o ajudam a validar sua assinatura de método no momento da compilação.

Se você implementar uma das interfaces, especifique package.class no código Java como o handler quando criar a função do Lambda. O exemplo a seguir é o comando create-function da CLI modificado a partir de "getting started". Observe que o parâmetro --handler especifica o valor "example.Hello":

aws lambda create-function \ --region region \ --function-name getting-started-lambda-function-in-java \ --zip-file fileb://deployment-package (zip or jar) path \ --role arn:aws:iam::account-id:role/lambda_basic_execution \ --handler example.Hello \ --runtime java8 \ --timeout 15 \ --memory-size 512

As seções a seguir fornecem exemplos de implementação dessas interfaces.

Exemplo 1: criar um handler com entrada/saída de POJO personalizada (aproveitar a interface RequestHandler)

A classe Hello de exemplo nesta seção implementa a interface RequestHandler. A interface define o método handleRequest() que aceita dados de eventos como parâmetro de entrada do tipo Request e retorna um objeto POJO do tipo Response:

public Response handleRequest(Request request, Context context) { ... }

A classe Hello com implementação de exemplo do método handleRequest() é mostrada. Neste exemplo, consideramos que os dados de eventos consistem no nome e sobrenome.

package example; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.Context; public class Hello implements RequestHandler<Request, Response> { public Response handleRequest(Request request, Context context) { String greetingString = String.format("Hello %s %s.", request.firstName, request.lastName); return new Response(greetingString); } }

Por exemplo, se os dados de eventos no objeto Request forem:

{ "firstName":"value1", "lastName" : "value2" }

O método retornará um objeto Response da seguinte forma:

{ "greetings": "Hello value1 value2." }

Em seguida, você deve implementar as classes Request e Response. Você pode usar a seguinte implementação para teste:

A classe Request:

package example; public class Request { String firstName; String lastName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public Request(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public Request() { } }

A classe Response:

package example; public class Response { String greetings; public String getGreetings() { return greetings; } public void setGreetings(String greetings) { this.greetings = greetings; } public Response(String greetings) { this.greetings = greetings; } public Response() { } }

Você pode criar uma função Lambda a partir deste código e testar a experiência completa da seguinte forma:

  • Usando o código anterior, crie um pacote de implantação. Para obter mais informações, consulte Pacote de implantação do AWS Lambda no Java

  • Faça upload do pacote de implantação no AWS Lambda e crie sua função do Lambda.

  • Teste a função Lambda usando o console ou a CLI. Você pode especificar quaisquer dados de amostra JSON em conformidade com o método getter e setter na sua classe Request, por exemplo:

    { "firstName":"John", "lastName" : "Doe" }

    Em resposta, a função Lambda retornará o JSON a seguir.

    { "greetings": "Hello John, Doe." }

Siga as instruções fornecidas nos conceitos básicos (consulte Criar uma função do Lambda escrita em Java). Observe as seguintes diferenças:

  • Quando você criar um pacote de implantação, não se esqueça da dependência da biblioteca aws-lambda-java-core.

  • Ao criar a função do Lambda, especifique example.Hello (pacote classe) como o valor do manipulador.

Exemplo 2: criar um handler com entrada/saída de fluxo (aproveitar a interface RequestStreamHandler)

A classe Hello neste de exemplo implementa a interface RequestStreamHandler. A interface define o método handleRequest da seguinte forma:

public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException { ... }

A classe Hello com implementação de exemplo do handler handleRequest() é mostrada. O handler processa dados de eventos de entrada (por exemplo, uma string "hello") simplesmente convertendo-os em maiúsculas e retornando-os.

package example; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import com.amazonaws.services.lambda.runtime.RequestStreamHandler; import com.amazonaws.services.lambda.runtime.Context; public class Hello implements RequestStreamHandler { public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException { int letter; while((letter = inputStream.read()) != -1) { outputStream.write(Character.toUpperCase(letter)); } } }

Você pode criar uma função Lambda a partir deste código e testar a experiência completa da seguinte forma:

  • Use o código anterior para criar o pacote de implantação.

  • Faça upload do pacote de implantação no AWS Lambda e crie sua função do Lambda.

  • Teste a função Lambda usando o console ou a CLI. Você pode especificar quaisquer dados de string de amostra, por exemplo:

    "test"

    Em resposta, a função do Lambda retornará TEST.

Siga as instruções fornecidas nos conceitos básicos (consulte Criar uma função do Lambda escrita em Java). Observe as seguintes diferenças:

  • Quando você criar um pacote de implantação, não se esqueça da dependência da biblioteca aws-lambda-java-core.

  • Ao criar a função do Lambda, especifique example.Hello (pacote classe) como o valor do manipulador.