AWS

31 jul, 2015

Atualização do AWS Lambda – executar código Java em resposta a eventos

Publicidade

Muitos clientes da AWS estão usando o AWS Lambda para construir aplicações simples e limpas, que lidam com uploads de imagens e documentos, processamento de arquivos de log do AWS CloudTrail, manipulação de dados transmitidos pelo Amazon Kinesis e assim por diante… Com a capacidade de invocação síncrona recentemente lançada, o AWS Lambda está rapidamente se tornando a escolha favorita para a construção de back-ends para dispositivos móveis, web e IoT.

Nossa lista de discussão interna está repleta de discussões sobre maneiras interessantes de usar Lambda – muitas das quais cairiam diretamente para o reino de processamento de dados tradicional. Estes clientes adoram o Lambda, porque eles podem se concentrar em sua aplicação e deixar as funções de hospedagem e de escalonamento para nós. Até à data, os desenvolvedores têm escrito suas funções Lambda em Node.js, um derivado do JavaScript projetado especificamente para uso em aplicações do lado do servidor.

Funções Lambda em Java

Estamos tornando o Lambda ainda mais útil dando-lhe a capacidade de escrever suas funções Lambda em Java. Temos recebido muitos pedidos para isto e a equipe está entusiasmada em ajudar. Esta é o primeira de uma série de opções de linguagem adicionais que pretendemos disponibilizar aos desenvolvedores Lambda.

Seu código pode fazer uso dos recursos do Java 8 (leia What’s New in JDK 8 para saber mais) em conjunto com quaisquer bibliotecas Java desejadas. Você também pode usar o AWS SDK para Java para fazer chamadas para as APIs da AWS.

Fornecemos duas bibliotecas específicas para o Lambda: aws-lambda-java-core com interfaces para handlers de funções lambda e objetos contextualizados, e aws-lambda-java-events contendo definições de tipo para fontes de eventos da AWS (Amazon Simple Storage Service (S3), Amazon Simple Notification Service (SNS), Amazon DynamoDB, Amazon Kinesis e Amazon Cognito). Você também pode querer gastar algum tempo aprendendo mais sobre o modelo de programação Lambda para Java.

Você pode criar suas funções Lambda de duas maneiras. Primeiro, você pode usar um modelo de alto nível que usa objetos de entrada e saída (os tipos de entrada e saída podem ser qualquer Java POJO ou primitivo):

public lambdaHandler( input, Context context) throws IOException; 
public lambdaHandler( input) throws IOException;

Se você não quiser usar POJOs ou se modelo de serialização de Lambda não atender às suas necessidades, você pode usar o modelo de Stream. Isto é um pouco mais baixo nível:

public void lambdaHandler(InputStream input, OutputStream output, Context context) 
  throws IOException;

A classe em que sua função Lambda é definida deve incluir um construtor público sem argumentos, ou definir o handler do método como estático. Alternativamente, você pode implementar um dos handlers das interfaces  (RequestHandler::handleRequest ou RequestStreamHandler::handleRequest) disponíveis com a biblioteca Lambda core Java.

Packaging, deploying e uploading

Você pode continuar a usar suas ferramentas de desenvolvimento existentes. A fim de preparar o seu código compilado para uso com o Lambda, você deve criar um arquivo ZIP ou JAR que contém seu código compilado (arquivos CLASS) e quaisquer arquivos JAR desejados (note que os pacotes de implantação enviados para o Lambda estão limitados a 50 MB). Seus handlers de funções devem ser armazenados na estrutura do diretório Java habitual  (por exemplo, com/mypackage/MyHandler.class); os arquivos JAR devem ser armazenados diretamente dentro de um subdiretório lib. A fim de facilitar esse processo, temos publicado métodos de construção utilizando ferramentas populares de desenvolvimento em Java tais como  MavenGradle.

Especifique um tempo de execução do “Java8″ quando carregar o arquivo Zip. Se você implementou um dos handles de interfaces, forneça o nome da classe. Caso contrário, forneça a referência do método totalmente qualificado (por exemplo, com.mypackage.LambdaHandler::functionHandler).

Usando o AWS Toolkit para Eclipse

O plugin AWS Toolkit para Eclipse irá automaticamente gerar e fazer o upload do arquivo Zip para você. Você pode criar um projeto Lambda no menu AWS:

lambda_eclipse_create_project_menu_1

Depois de preencher os dados do seu projeto, você pode começar com modelo gerado pelo toolkit:

lambda_java_function_1

Então você pode escrever suas funções e implantá-las no Lambda com um clique:

lambda_run_that_puppy_1

E então você pode chamá-lo:

lambda_invoke_1

Você já pode começar a escrever suas funções Lambda com o Java!

Para saber mais, leia Authoring Lambda Functions in Java na documentação do Lambda.