Objeto de contexto do AWS Lambda em Java - AWS Lambda

Objeto de contexto do AWS Lambda em Java

Quando o Lambda executa a função, ele transmite um objeto de contexto para o handler. Esse objeto fornece métodos e propriedades que fornecem informações sobre a invocação, a função e o ambiente de execução.

Métodos de contexto

  • getRemainingTimeInMillis() – Retorna o número de milissegundos que restam antes que a execução expire.

  • getFunctionName() – Retorna o nome da função do Lambda.

  • getFunctionVersion() – Retorna a versão da função.

  • getInvokedFunctionArn() – Retorna o nome de recurso da Amazon (ARN) usado para invocar a função. Indica se o invocador especificou um alias ou número de versão.

  • getMemoryLimitInMB() – Retorna a quantidade de memória que está alocada para a função.

  • getAwsRequestId() – Retorna o identificador da solicitação de invocação.

  • getLogGroupName() – Retorna o grupo de logs para a função.

  • getLogStreamName() – Retorna o fluxo de log para a instância da função.

  • getIdentity() – (aplicativos móveis) Retorna informações sobre a identidade do Amazon Cognito que autorizou a solicitação.

  • getClientContext() – (aplicativos móveis) Retorna o contexto do cliente fornecido ao Lambda pelo aplicativo cliente.

  • getLogger() – retorna o objeto Logger para a função.

O exemplo a seguir mostra uma função que usa o objeto de contexto para acessar o logger do Lambda.

exemplo 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; } }

A função serializa o objeto de contexto em JSON e o registra em seu fluxo de log.

exemplo Resultado de saída do log

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

A interface para o objeto de contexto está disponível na biblioteca aws-lambda-java-core. É possível implementar essa interface para criar uma classe de contexto para teste. O exemplo a seguir mostra uma classe de contexto que retorna valores fictícios para a maioria das propriedades e um logger de teste funcional.

exemplo 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 obter mais informações sobre registro em log, consulte Registro em log da função do AWS Lambda em Java.

Contexto em aplicativos de exemplo

O repositório do GitHub para este guia inclui aplicativos de exemplo que demonstram o uso do objeto de contexto. Cada aplicativo de exemplo inclui scripts para fácil implantação e limpeza, um modelo do Modelo de aplicativo sem servidor da AWS (AWS SAM) e recursos de suporte.

Aplicativos de exemplo do Lambda em Java

  • blank-java – uma função Java que mostra o uso das bibliotecas Java do Lambda, registro em log, variáveis de ambiente, camadas, rastreamento do AWS X-Ray, testes de unidade e do AWS SDK.

  • java-basic – uma função Java mínima com testes de unidade e configuração de registro em log variável.

  • java-events – uma função Java mínima que usa a biblioteca aws-lambda-java-events com tipos de evento que não exigem o AWS SDK como dependência, como o Amazon API Gateway.

  • java-events-v1sdk – uma função Java que usa a biblioteca aws-lambda-java-events com tipos de evento que exigem o AWS SDK como dependência (Amazon Simple Storage Service, Amazon DynamoDB e Amazon Kinesis).

  • s3-java – uma função Java que processa eventos de notificação do Amazon S3 e usa a Java Class Library (JCL) para criar miniaturas de arquivos de imagem enviados por upload.

Todos os aplicativos de exemplo têm uma classe de contexto de teste para testes de unidade. O aplicativo java-basic mostra como usar o objeto de contexto para obter um logger. Ele usa SLF4J e Log4J 2 para fornecer um logger que funcione para testes de unidade local.