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
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 -