Uso del objeto de contexto Lambda para recuperar información de funciones de Java - AWS Lambda

Uso del objeto de contexto Lambda para recuperar información de funciones de Java

Cuando Lambda ejecuta su función, pasa un objeto context al controlador. Este objeto proporciona métodos y propiedades que facilitan información acerca de la invocación, la función y el entorno de ejecución.

Métodos de context
  • getRemainingTimeInMillis(): devuelve el número de milisegundos que quedan antes del tiempo de espera de la ejecución.

  • getFunctionName(): el nombre de la función de Lambda.

  • getFunctionVersion(): devuelve la version de la función.

  • getInvokedFunctionArn(): devuelve el nombre de recurso de Amazon (ARN) que se utiliza para invocar la función. Indica si el invocador especificó un número de versión o alias.

  • getMemoryLimitInMB(): devuelve la cantidad de memoria asignada a la función.

  • getAwsRequestId(): devuelve el identificador de la solicitud de invocación.

  • getLogGroupName(): devuelve el grupo de registros de para la función.

  • getLogStreamName(): devuelve el flujo de registro de la instancia de la función.

  • getIdentity(): (aplicaciones móviles) devuelve la información acerca de la identidad de Amazon Cognito que autorizó la solicitud.

  • getClientContext(): (aplicaciones móviles) devuelve el contexto de cliente proporcionado a Lambda por la aplicación cliente.

  • getLogger(): devuelve el objeto logger para la función.

En el ejemplo siguiente, se muestra una función que utiliza el objeto contextual para acceder al registrador de Lambda.

ejemplo Handler.java
package example; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import java.util.Map; // Handler value: example.Handler public class Handler implements RequestHandler<Map<String,String>, Void>{ @Override public Void handleRequest(Map<String,String> event, Context context) { LambdaLogger logger = context.getLogger(); logger.log("EVENT TYPE: " + event.getClass()); return null; } }

La función registra el tipo de clase del evento entrante antes de volver a null.

ejemplo salida del registro
EVENT TYPE: class java.util.LinkedHashMap

La interfaz del objeto contextual está disponible en la biblioteca aws-lambda-java-core. Puede implementar esta interfaz para crear una clase contextual para las pruebas. En el ejemplo siguiente, se muestra una clase contextual que devuelve valores ficticios para la mayoría de las propiedades y un registrador de pruebas en funcionamiento.

ejemplo src/test/java/example/TestContext.java
package example; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.CognitoIdentity; import com.amazonaws.services.lambda.runtime.ClientContext; import com.amazonaws.services.lambda.runtime.LambdaLogger; public class TestContext implements Context{ public TestContext() {} public String getAwsRequestId(){ return new String("495b12a8-xmpl-4eca-8168-160484189f99"); } public String getLogGroupName(){ return new String("/aws/lambda/my-function"); } public String getLogStreamName(){ return new String("2020/02/26/[$LATEST]704f8dxmpla04097b9134246b8438f1a"); } public String getFunctionName(){ return new String("my-function"); } public String getFunctionVersion(){ return new String("$LATEST"); } public String getInvokedFunctionArn(){ return new String("arn:aws:lambda:us-east-2:123456789012:function:my-function"); } public CognitoIdentity getIdentity(){ return null; } public ClientContext getClientContext(){ return null; } public int getRemainingTimeInMillis(){ return 300000; } public int getMemoryLimitInMB(){ return 512; } public LambdaLogger getLogger(){ return new TestLogger(); } }

Para obtener más información sobre los registros, consulte Registro y supervisión de las funciones de Lambda de Java.

Contexto en aplicaciones de ejemplo

El repositorio de GitHub para esta guía contiene aplicaciones de ejemplo en las que se muestra el uso del objeto contextual. Cada una de las aplicaciones de ejemplo contiene scripts para facilitar la implementación y la limpieza, una plantilla de AWS Serverless Application Model (AWS SAM) y recursos de soporte.

Aplicaciones de Lambda de ejemplo en Java
  • java17-examples: una función de Java que demuestra cómo utilizar un registro de Java para representar un objeto de datos de eventos de entrada.

  • java-basic: una colección de funciones de Java mínimas con pruebas unitarias y configuración de registro variable.

  • java-events: una colección de funciones Java que contiene un código básico sobre cómo gestionar los eventos de varios servicios, como Amazon API Gateway, Amazon SQS y Amazon Kinesis. Estas funciones utilizan la última versión de la biblioteca aws-lambda-java-events (3.0.0 y más recientes). Estos ejemplos no requieren utilizar AWS SDK como una dependencia.

  • s3-java: una función de Java que procesa los eventos de notificación de Amazon S3 y utiliza Java Class Library (JCL) para crear miniaturas de los archivos de imagen cargados.

  • custom-serialization: ejemplos de cómo implementar la serialización personalizada con bibliotecas populares como fastJson, Gson, Moshi y jackson-jr.

  • Uso de API Gateway para invocar una función de Lambda: una función Java que escanea una tabla de Amazon DynamoDB que contiene información sobre los empleados. Luego, utiliza Amazon Simple Notification Service para enviar un mensaje de texto a los empleados que celebran sus aniversarios laborales. En este ejemplo, se utiliza API Gateway para invocar la función.