Funções Serverless em Java com AWS Lambda: da ideia ao deploy
A arquitetura Serverless (ou computação sem servidor) é um modelo de computação em nuvem onde o desenvolvedor abstrai completamente o gerenciamento de servidores. Você simplesmente escreve o código, faz o upload para a nuvem, e o provedor (AWS, Google Cloud, Azure) escala a infraestrutura automaticamente. AWS Lambda é o serviço principal da Amazon nesta área. Neste artigo, vamos analisar como criar funções serverless em Java, usando AWS Lambda, do zero até um exemplo pronto para produção.
O que é AWS Lambda e por que Java?
AWS Lambda permite executar código em resposta a eventos (requisições HTTP, uploads de arquivos para S3, alterações no DynamoDB, etc.) sem alocar máquinas virtuais. Você paga apenas pelo tempo de execução real e pelo número de requisições.
Java é uma linguagem madura, estaticamente tipada, com um enorme ecossistema de bibliotecas (Spring, Micronaut, Quarkus). No entanto, Java tem particularidades para serverless: o cold start (tempo de inicialização da JVM) pode ser maior do que em Node.js ou Python. Mas frameworks modernos (por exemplo, Quarkus ou Spring Cloud Function) e o uso de GraalVM Native Image resolvem esse problema, tornando Java uma escolha competitiva.
Configuração do ambiente de desenvolvimento
Para trabalhar com AWS Lambda em Java, você precisará de:
- JDK 11 ou 17 (recomendado 17 para melhor desempenho).
- Maven ou Gradle (usaremos Maven).
- Uma conta AWS e o AWS CLI instalado.
- IDE (IntelliJ IDEA, Eclipse, VS Code).
Crie um projeto Maven básico. Adicione a dependência do AWS Lambda Java Core no pom.xml:
<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-core</artifactId> <version>1.2.3</version></dependency>Adicione também o plugin de build:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.5.0</version> <executions> <execution> <phase>package</phase> <goals><goal>shade</goal></goals> </execution> </executions></plugin>Criando a primeira função Lambda em Java
Crie a classe HelloLambda.java:
import com.amazonaws.services.lambda.runtime.Context;import com.amazonaws.services.lambda.runtime.RequestHandler;
public class HelloLambda implements RequestHandler<String, String> {
@Override public String handleRequest(String input, Context context) { context.getLogger().log("Input: " + input); return "Hello, " + input + "! Sua função Lambda em Java foi executada."; }}Explicação:
RequestHandler<String, String>— interface onde o primeiro tipo são os dados de entrada, o segundo é o tipo de retorno.Context— objeto que fornece informações sobre o ambiente de execução (logger, tempo, nome da função).
Compile o projeto: mvn clean package. Na pasta target, um arquivo JAR será gerado (por exemplo, lambda-java-1.0-SNAPSHOT.jar).
Deploy da função no AWS Lambda
O deploy pode ser feito via AWS Console ou CLI. Vamos usar o CLI (a maneira mais rápida):
aws lambda create-function \ --function-name HelloJavaLambda \ --runtime java17 \ --role arn:aws:iam::YOUR_ACCOUNT_ID:role/lambda-basic-execution \ --handler HelloLambda::handleRequest \ --zip-file fileb://target/lambda-java-1.0-SNAPSHOT.jarParâmetros importantes: