Objeto context de AWS Lambda en Java - AWS Lambda

Objeto context de AWS Lambda en 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 faltan antes de que se agote el tiempo de espera.

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

  • getFunctionVersion() – Devuelve la versión 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 ha especificado un alias o un número de versión.

  • getMemoryLimitInMB() – Devuelve la cantidad de memoria que se asigna para la función.

  • getAwsRequestId() – Devuelve el identificador de la solicitud de invocación.

  • getLogGroupName() – Devuelve el grupo de registros de la función.

  • getLogStreamName() – Devuelve el flujo de registro para la instancia de la función.

  • getIdentity() – (aplicaciones móviles) Devuelve información acerca de la identidad de Amazon Cognito que ha autorizado la solicitud.

  • getClientContext() – (aplicaciones móviles) Devuelve el contexto del cliente proporcionado a Lambda por parte de la aplicación del 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.RequestHandler import com.amazonaws.services.lambda.runtime.LambdaLogger ... // Handler value: example.Handler public class Handler implements RequestHandler<Map<String,String>, String>{ Gson gson = new GsonBuilder().setPrettyPrinting().create(); @Override public String handleRequest(Map<String,String> event, Context context) { LambdaLogger logger = context.getLogger(); String response = new String("200 OK"); // log execution details logger.log("ENVIRONMENT VARIABLES: " + gson.toJson(System.getenv())); logger.log("CONTEXT: " + gson.toJson(context)); // process event logger.log("EVENT: " + gson.toJson(event)); logger.log("EVENT TYPE: " + event.getClass().toString()); return response; } }

La función serializa el objeto contextual en JSON y lo registra en su secuencia de registro.

ejemplo salida del registro

START RequestId: 6bc28136-xmpl-4365-b021-0ce6b2e64ab0 Version: $LATEST ... CONTEXT: { "memoryLimit": 512, "awsRequestId": "6bc28136-xmpl-4365-b021-0ce6b2e64ab0", "functionName": "java-console", ... } ... END RequestId: 6bc28136-xmpl-4365-b021-0ce6b2e64ab0 REPORT RequestId: 6bc28136-xmpl-4365-b021-0ce6b2e64ab0 Duration: 198.50 ms Billed Duration: 200 ms Memory Size: 512 MB Max Memory Used: 90 MB Init Duration: 524.75 ms

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 LambdaLogger getLogger(){ return new TestLogger(); } }

Para obtener más información sobre los registros, consulte Registro de funciones de AWS Lambda en 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 Modelo de aplicación sin servidor de AWS (AWS SAM) y recursos de soporte.

Aplicaciones de Lambda de ejemplo en Java

  • blank-java – función de Java que muestra el uso de bibliotecas de Java de Lambda, el registro, las variables de entorno, las capas, el seguimiento de AWS X-Ray, las pruebas unitarias y el AWS SDK.

  • java-basic: función de Java mínima con pruebas unitarias y configuración de registro de variables.

  • java-events – función de Java mínima que utiliza la biblioteca aws-lambda-java-events con tipos de eventos que no requieren el SDK AWS como dependencia, como Amazon API Gateway.

  • java-events-v1sdk – Función Java que utiliza la biblioteca aws-lambda-java-events con tipos de eventos que requieren el AWS SDK como una dependenciaAmazon Simple Storage Service ((Amazon S3) Amazon DynamoDB, y Amazon Kinesis).

  • s3-java: 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.

Todas las aplicaciones de ejemplo tienen una clase de contextual para las pruebas unitarias. La aplicación java-basic muestra como utilizar el objeto contextual para obtener un registrador. Utiliza SLF4J y Log4J 2 para proporcionar un registrador que funcione con pruebas unitarias locales.