AWS Lambda - Função em Java

Neste capítulo, vamos entender em detalhes como criar uma função simples do AWS Lambda em Java.

Criação de arquivo JAR no Eclipse

Antes de continuar a trabalhar na criação de uma função lambda no AWS, precisamos do suporte do kit de ferramentas AWS para Eclipse. Para qualquer orientação sobre a instalação do mesmo, você pode consultar oEnvironment Setup capítulo neste tutorial.

Assim que terminar a instalação, siga as etapas fornecidas aqui -

Passo 1

Abra Eclipse IDE e crie um novo projeto com AWS Lambda Java Project. Observe a captura de tela fornecida abaixo para melhor compreensão -

Passo 2

Depois de selecionar Next, ele irá redirecioná-lo para a tela mostrada abaixo -

etapa 3

Agora, um código padrão é criado para o tipo de entrada Custom. Depois de clicarFinish botão o projeto é criado conforme mostrado abaixo -

Passo 4

Agora, clique com o botão direito no seu projeto e exporte-o. SelecioneJava / JAR arquivo do Export assistente e clique Next.

Etapa 5

Agora, se você clicar Next, será solicitado que você salve o arquivo na pasta de destino, o que será solicitado quando você clicar em Avançar.

Depois que o arquivo for salvo, volte ao AWS Console e crie a função AWS Lambda para Java.

Etapa 6

Agora, carregue o .jar arquivo que criamos usando o Upload botão conforme mostrado na imagem abaixo -

Detalhes do manipulador para Java

Handler é package name e class name. Veja o exemplo a seguir para entender o manipulador em detalhes -

Exemplo

package com.amazonaws.lambda.demo;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler
      
        { @Override public String handleRequest(Object input, Context context) { context.getLogger().log("Input: " + input); // TODO: implement your handler return "Hello from Lambda!"; } } 
      

Observe que a partir do código acima, o manipulador será com.amazonaws.lambda.demo.LambdaFunctionHandler

Agora, vamos testar as mudanças e ver o resultado -

Objeto de contexto em Java

A interação com a execução do AWS Lambda é feita usando o contexto. Ele fornece os seguintes métodos para serem usados ​​dentro do Java -

Sr. Não Métodos de contexto e descrição
1

getMemoryLimitInMB()

isso fornecerá o limite de memória que você especificou ao criar a função lambda.

2

getFunctionName()

isso dará o nome da função lambda.

3

getFunctionVersion()

isso dará a versão da função lambda em execução.

4

getInvokedFunctionArn()

isso fornecerá o ARN usado para invocar a função.

5

getAwsRequestId()

isso fornecerá o id do pedido aws. Este id é criado para a função lambda e é único. O id pode ser usado com o caso de suporte aws se você enfrentar quaisquer problemas.

6

getLogGroupName()

isso dará o nome do grupo aws cloudwatch vinculado à função aws lambda criada. Será nulo se o usuário iam não tiver permissão para o registro do Cloudwatch.

7

getClientContext()

isso fornecerá detalhes sobre o aplicativo e o dispositivo quando usado com o aws mobile sdk. Ele fornecerá detalhes como nome e código da versão, id do cliente, título, nome do pacote do aplicativo. Pode ser nulo.

8

getIdentity()

isto dará detalhes sobre a identidade do amazon cognito quando usado com o aws mobile sdk. Pode ser nulo.

9

getRemainingTimeInMillis()

isso dará o tempo restante de execução em milissegundos quando a função for encerrada após o tempo limite especificado.

10

getLogger()

isso dará o logger lambda vinculado ao objeto de contexto.

Agora, vamos atualizar o código fornecido acima e observar a saída de alguns dos métodos listados acima. Observe o código de exemplo fornecido abaixo para uma melhor compreensão -

package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
   @Override
   public String handleRequest(Object input, Context context) {
      context.getLogger().log("Input: " + input);
      System.out.println("AWS Lambda function name: " + context.getFunctionName());
      System.out.println("Memory Allocated: " + context.getMemoryLimitInMB());
      System.out.println("Time remaining in milliseconds: " + context.getRemainingTimeInMillis());
      System.out.println("Cloudwatch group name " + context.getLogGroupName());
      System.out.println("AWS Lambda Request Id " + context.getAwsRequestId());
      
      // TODO: implement your handler
      return "Hello from Lambda!";
   }
}

Depois de executar o código fornecido acima, você pode encontrar a saída conforme fornecido abaixo -

Logs para contexto

Você pode observar a seguinte saída ao visualizar sua saída de log -

A memória alocada para a função Lambda é 512 MB. O tempo alocado é de 25 segundos. O tempo restante conforme exibido acima é 24961, que é em milissegundos. Portanto, 25000 - 24961 que equivale a 39 milissegundos é usado para a execução da função Lambda. Observe que o nome do grupo Cloudwatch e a id do pedido também são exibidos conforme mostrado acima.

Observe que usamos o seguinte comando para imprimir logs em Java -

System.out.println (“log message”)

O mesmo está disponível no CloudWatch. Para isso, vá para serviços AWS, selecioneCloudWatchservices e clique Logs.

Agora, se você selecionar a função Lambda, ela exibirá a data dos registros conforme mostrado abaixo -

Logging em Java

Você também pode usar Lambdalogger em Java para registrar os dados. Observe o seguinte exemplo que mostra o mesmo -

Exemplo

package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
   @Override
   public String handleRequest(Object input, Context context) {
      LambdaLogger logger = context.getLogger();
      logger.log("Input: " + input);
      logger.log("AWS Lambda function name: " + context.getFunctionName()+"\n");
      logger.log("Memory Allocated: " + context.getMemoryLimitInMB()+"\n");
      logger.log("Time remaining in milliseconds: " + context.getRemainingTimeInMillis()+"\n");
      logger.log("Cloudwatch group name " + context.getLogGroupName()+"\n");
      logger.log("AWS Lambda Request Id " + context.getAwsRequestId()+"\n");
      
      // TODO: implement your handler
      return "Hello from Lambda!";
   }
}

O código mostrado acima fornecerá a seguinte saída -

A saída no CloudWatch será conforme mostrado abaixo -

Tratamento de erros em Java para Função Lambda

Esta seção explicará como lidar com erros na função Java para Lambda. Observe o seguinte código que mostra o mesmo -

package com.amazonaws.lambda.errorhandling;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
   @Override
   public String handleRequest(Object input, Context context) {
      throw new RuntimeException("Error from aws lambda");
   } 
}

Observe que os detalhes do erro são exibidos em json formato com errorMessage Error from AWS Lambda. Também oErrorType e stackTrace fornece mais detalhes sobre o erro.

A saída e a saída de log correspondente do código fornecido acima serão as mostradas nas seguintes capturas de tela fornecidas abaixo -