Funciones Serverless en Java con AWS Lambda: de la idea al despliegue
La arquitectura Serverless (o computación sin servidor) es un modelo de computación en la nube donde el desarrollador se abstrae completamente de la gestión de servidores. Simplemente escribes código, lo subes a la nube, y el proveedor (AWS, Google Cloud, Azure) escala automáticamente la infraestructura. AWS Lambda es el servicio insignia de Amazon en esta área. En este artículo, analizaremos cómo crear funciones serverless en Java usando AWS Lambda, desde cero hasta un ejemplo listo para producción.
¿Qué es AWS Lambda y por qué Java?
AWS Lambda permite ejecutar código en respuesta a eventos (solicitudes HTTP, cargas de archivos a S3, cambios en DynamoDB, etc.) sin aprovisionar máquinas virtuales. Solo pagas por el tiempo de ejecución real y la cantidad de solicitudes.
Java es un lenguaje maduro, estáticamente tipado, con un enorme ecosistema de bibliotecas (Spring, Micronaut, Quarkus). Sin embargo, Java tiene particularidades para serverless: el arranque en frío (tiempo de carga de la JVM) puede ser mayor que en Node.js o Python. Pero los frameworks modernos (por ejemplo, Quarkus o Spring Cloud Function) y el uso de GraalVM Native Image resuelven este problema, haciendo de Java una opción competitiva.
Configuración del entorno de desarrollo
Para trabajar con AWS Lambda en Java necesitarás:
- JDK 11 o 17 (se recomienda 17 para un mejor rendimiento).
- Maven o Gradle (nosotros usamos Maven).
- Una cuenta de AWS y AWS CLI instalado.
- IDE (IntelliJ IDEA, Eclipse, VS Code).
Crea un proyecto Maven básico. Añade la dependencia para AWS Lambda Java Core en pom.xml:
<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-core</artifactId> <version>1.2.3</version></dependency>También añade el plugin de compilación:
<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>Creación de la primera función Lambda en Java
Crea la clase 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 + "! Tu función Lambda en Java se ha ejecutado."; }}Explicación:
RequestHandler<String, String>— interfaz donde el primer tipo son los datos de entrada y el segundo el tipo de retorno.Context— objeto que proporciona información sobre el entorno de ejecución (logger, tiempo, nombre de la función).
Compila el proyecto: mvn clean package. En la carpeta target aparecerá un archivo JAR (por ejemplo, lambda-java-1.0-SNAPSHOT.jar).
Despliegue de la función en AWS Lambda
El despliegue se puede realizar a través de AWS Console o CLI. Veamos CLI (la forma más 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: