AWS Lambda: función en Java

En este capítulo, comprendamos en detalle cómo crear una función AWS Lambda simple en Java en detalle.

Creando un archivo JAR en Eclipse

Antes de comenzar a trabajar en la creación de una función lambda en AWS, necesitamos el soporte del kit de herramientas de AWS para Eclipse. Para cualquier orientación sobre la instalación del mismo, puede consultar elEnvironment Setup capítulo de este tutorial.

Una vez que haya terminado con la instalación, siga los pasos que se indican aquí:

Paso 1

Abra Eclipse IDE y cree un nuevo proyecto con AWS Lambda Java Project. Observe la captura de pantalla que se muestra a continuación para una mejor comprensión:

Paso 2

Una vez que seleccione Next, le redirigirá a la pantalla que se muestra a continuación:

Paso 3

Ahora, se crea un código predeterminado para Tipo de entrada Custom. Una vez que haces clicFinish botón el proyecto se crea como se muestra a continuación -

Paso 4

Ahora, haga clic derecho en su proyecto y expórtelo. SeleccioneJava / JAR archivo del Export asistente y haga clic en Next.

Paso 5

Ahora, si hace clic en Next, se le pedirá que guarde el archivo en la carpeta de destino que se le preguntará cuando haga clic en siguiente.

Una vez guardado el archivo, vuelva a la consola de AWS y cree la función de AWS Lambda para Java.

Paso 6

Ahora, sube el .jar archivo que creamos usando el Upload botón como se muestra en la captura de pantalla que se muestra a continuación:

Detalles del controlador para Java

Handler es package name y class name. Mire el siguiente ejemplo para comprender el manejador en detalle:

Ejemplo

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 del código anterior, el controlador será com.amazonaws.lambda.demo.LambdaFunctionHandler

Ahora, probemos los cambios y veamos el resultado:

Objeto de contexto en Java

La interacción con la ejecución de AWS Lambda se realiza mediante el contexto. Proporciona los siguientes métodos para usar dentro de Java:

No Señor Métodos de contexto y descripción
1

getMemoryLimitInMB()

esto le dará el límite de memoria que especificó al crear la función lambda.

2

getFunctionName()

esto le dará el nombre de la función lambda.

3

getFunctionVersion()

esto dará la versión de la función lambda en ejecución.

4

getInvokedFunctionArn()

esto dará el ARN usado para invocar la función.

5

getAwsRequestId()

esto dará la identificación de la solicitud aws. Esta identificación se crea para la función lambda y es única. La identificación se puede usar con el soporte de AWS en caso de que tenga algún problema.

6

getLogGroupName()

esto le dará el nombre del grupo de aws cloudwatch vinculado con la función aws lambda creada. Será nulo si el usuario de iam no tiene permiso para el registro de Cloudwatch.

7

getClientContext()

Esto proporcionará detalles sobre la aplicación y el dispositivo cuando se usa con aws mobile sdk. Dará detalles como el nombre y el código de la versión, la identificación del cliente, el título, el nombre del paquete de la aplicación. Puede ser nulo.

8

getIdentity()

Esto proporcionará detalles sobre la identidad del cognito de amazon cuando se utilice con aws mobile sdk. Puede ser nulo.

9

getRemainingTimeInMillis()

esto dará el tiempo restante de ejecución en milisegundos cuando la función finalice después del tiempo de espera especificado.

10

getLogger()

esto le dará al lambda logger vinculado con el objeto de contexto.

Ahora, actualicemos el código dado arriba y observemos el resultado de algunos de los métodos enumerados anteriormente. Observe el código de ejemplo que se proporciona a continuación para una mejor comprensión:

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!";
   }
}

Una vez que ejecute el código dado arriba, puede encontrar el resultado como se indica a continuación:

Registros para el contexto

Puede observar la siguiente salida cuando está viendo su salida de registro:

La memoria asignada para la función Lambda es de 512 MB. El tiempo asignado es de 25 segundos. El tiempo restante como se muestra arriba es 24961, que está en milisegundos. Por tanto, 25000 - 24961, que equivale a 39 milisegundos, se utiliza para la ejecución de la función Lambda. Tenga en cuenta que el nombre del grupo de Cloudwatch y la identificación de la solicitud también se muestran como se muestra arriba.

Tenga en cuenta que hemos utilizado el siguiente comando para imprimir registros en Java:

System.out.println (“log message”)

Lo mismo está disponible en CloudWatch. Para ello, vaya a los servicios de AWS, seleccioneCloudWatchservices y haga clic en Logs.

Ahora, si selecciona la función Lambda, mostrará la fecha de los registros como se muestra a continuación:

Iniciar sesión en Java

También puede utilizar Lambdalogger en Java para registrar los datos. Observe el siguiente ejemplo que muestra lo mismo:

Ejemplo

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!";
   }
}

El código que se muestra arriba le dará el siguiente resultado:

La salida en CloudWatch será la que se muestra a continuación:

Manejo de errores en Java para la función Lambda

Esta sección explica cómo manejar errores en la función Java para Lambda. Observe el siguiente código que muestra lo mismo:

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");
   } 
}

Tenga en cuenta que los detalles del error se muestran en json formato con mensaje de error Error from AWS Lambda. También elErrorType y stackTrace da más detalles sobre el error.

La salida y la salida de registro correspondiente del código dado arriba será como se muestra en las siguientes capturas de pantalla que se muestran a continuación: