AWS Lambda
Guia do desenvolvedor

Manipulador de função do AWS Lambda no Java

Quando você cria uma função do Lambda, especifica um manipulador que o AWS Lambda pode invocar quando o serviço executa a função do Lambda em seu nome.

O Lambda oferece suporte a duas abordagens para criar um manipulador:

  • Carregar o método do manipulador diretamente sem a necessidade de implementar uma interface. Esta seção descreve essa abordagem.

  • Implementar interfaces padrão fornecidas como parte da biblioteca aws-lambda-java-core (abordagem de interface). Para obter mais informações, consulte Aproveitar interfaces predefinidas para criar handler (Java).

A sintaxe geral do manipulador é a seguinte:

outputType handler-name(inputType input, Context context) { ... }

Para que o AWS Lambda tenha êxito ao invocar um manipulador, esse deve ser invocado com dados de entrada que possam ser serializados para o tipo de dados do parâmetro input.

Observe o seguinte em relação à sintaxe:

  • inputType – O primeiro parâmetro do manipulador é a entrada do manipulador, que pode ser os dados do evento (publicados por uma origem de evento) ou uma entrada personalizada fornecida por você, tal como uma string ou qualquer objeto de dados personalizado. Para que o AWS Lambda tenha êxito ao invocar esse manipulador, a função deve ser invocada com dados de entrada que possam ser serializados para o tipo de dados do parâmetro input.

  • outputType – Se você planeja invocar a função do Lambda de forma síncrona (usando o tipo de invocação RequestResponse), pode fazer com que a saída de sua função retorne um dos tipos de dados compatíveis. Por exemplo, se você usar uma função do Lambda como um back-end de aplicativo móvel, estará invocando-a de forma síncrona. O tipo de dados de saída será serializado em JSON.

    Se você planeja invocar a função do Lambda de forma assíncrona (usando o tipo de invocação Event), o outputType deve ser void. Por exemplo, se você usar o AWS Lambda com origens de eventos como Amazon S3 ou Amazon SNS, essas origens de eventos invocarão a função do Lambda usando o tipo de invocação Event.

  • Os tipos inputType e outputType podem ser:

    • Tipos Java primitivos (como String ou int).

    • Tipos predefinidos de eventos da AWS definidos na biblioteca aws-lambda-java-events.

      Por exemplo S3Event é um dos POJOs predefinidos na biblioteca que fornece métodos para facilitar a leitura das informações dos eventos do Amazon S3 de entrada.

    • Você também pode escrever sua própria classe POJO. O AWS Lambda serializa e desserializa automaticamente o JSON de entrada e saída com base no tipo do POJO.

    Para obter mais informações, consulte Tipos de entrada/saída de manipuladores (Java).

  • Você poderá omitir o objeto Context da assinatura do método do manipulador se ele não for necessário. Para obter mais informações, consulte Objeto de contexto do AWS Lambda no Java.

Por exemplo, considere o seguinte exemplo de código em Java:

package example; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; public class Hello implements RequestHandler<Integer, String>{ public String myHandler(int myCount, Context context) { return String.valueOf(myCount); } }

Neste exemplo, a entrada é do tipo inteiro e a saída é do tipo string. Se preparar o pacote deste código e suas dependências, e criar a função do Lambda, especifique example.Hello::myHandler (package.class::method-reference) como manipulador.

No exemplo de código em Java, o primeiro parâmetro do manipulador é a entrada do manipulador (myHandler), que pode ser os dados do evento (publicados por uma fonte do evento, como o Amazon S3) ou uma entrada personalizada fornecida por você, como um objeto inteiro (como neste exemplo) ou um objeto de dados personalizado qualquer.

Para obter instruções para criar uma função do Lambda usando esse código Java, consulte Criar uma função do Lambda escrita em Java.

Resolução de sobrecarga do manipulador

Se o seu código Java contiver vários métodos que usam o mesmo nome de handler, o AWS Lambda usará as seguintes regras para escolher um método para invocar:

  1. Selecionar o método com o maior número de parâmetros.

  2. Se dois ou mais métodos tiverem o mesmo número de parâmetros, o AWS Lambda selecionará o método que tem Context como o último parâmetro.

    Se nenhum ou todos esses métodos tiverem o parâmetro Context, o comportamento será indefinido.

Informações adicionais

Os tópicos a seguir fornecem informações adicionais sobre o manipulador.