Projeto de exemplo demonstrando como empacotar e executar uma função AWS Lambda usando Java 17 e Maven, com o plugin maven-shade para geração do JAR de deploy.
- Visão Geral
- Pré-requisitos
- Código da Função
- Build com Maven
- Deploy na AWS Lambda
- Testando a Função
- Resultado Esperado
- Referências
Esta função Lambda recebe uma String como input, loga a versão do JDK em uso e retorna o texto convertido para maiúsculas.
| Campo | Valor |
|---|---|
| Runtime | Java 17 |
| Handler | dev.ollin.hj17.SimpleHandler |
| Input type | String |
| Output type | String |
| Build tool | Maven + maven-shade-plugin |
- Java 17 (JDK)
- Apache Maven 3.6+
- Conta AWS com permissões de Lambda
src/main/java/dev/ollin/hj17/SimpleHandler.java
package dev.ollin.hj17;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class SimpleHandler implements RequestHandler<String, String> {
public String handleRequest(String input, Context context) {
LambdaLogger logger = context.getLogger();
logger.log("JDK Version: " + System.getProperty("java.version"));
return input.toUpperCase();
}
}A função implementa RequestHandler<String, String> do SDK da AWS Lambda e:
Obtém o logger do contexto da Lambda e loga a versão do JDK em execução via System.getProperty("java.version") e retorna o input convertido.
O plugin maven-shade empacota todas as dependências em um único JAR ("fat JAR" / "uber JAR"), necessário para o deploy na AWS Lambda:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>Por que
maven-shade? A AWS Lambda exige um JAR único com todas as dependências incluídas. O shade-plugin faz esse empacotamento automaticamente na fasepackage.
mvn clean packageO JAR gerado estará em:
target/helloJava17-1.0-SNAPSHOT.jar
- Acesse AWS Lambda → Criar função
- Selecione "Criar do zero"
- Configure:
- Nome da função:
helloJava17 - Runtime:
Java 17 - Arquitetura:
x86_64
- Nome da função:
- Em "Código", faça upload do JAR gerado em
target/ - Em "Configuração de runtime", defina o handler:
dev.ollin.hj17.SimpleHandler::handleRequest
No painel da função, vá em Test e use o seguinte evento de teste:
"hello, java 17"Clique em Test para executar.
Após a execução bem-sucedida, você verá:
Saída da função:
"HELLO, JAVA 17"
Log output (CloudWatch):
START RequestId: cbb2607b-87c9-4030-b437-c85ba6363dc1 Version: $LATEST
JDK Version: 17.0.18
END RequestId: cbb2607b-87c9-4030-b437-c85ba6363dc1
REPORT RequestId: cbb2607b-87c9-4030-b437-c85ba6363dc1
Duration: 30.06 ms
Billed Duration: 403 ms
Memory Size: 512 MB
Max Memory Used: 95 MB
Init Duration: 372.88 ms
| Métrica | Valor | Observação |
|---|---|---|
| Duration | 30.06 ms | Tempo real de execução |
| Billed Duration | 403 ms | Inclui o cold start |
| Init Duration | 372.88 ms | Cold start — JVM initialization |
| Max Memory Used | 95 MB | Pico de uso de memória |
| Resources Configured | 512 MB | Memória alocada para a função |
Nota sobre Cold Start: O
Init Durationde ~373ms é característico do Java na Lambda (inicialização da JVM). Em invocações subsequentes ("warm"), apenas oDurationde ~30ms é cobrado.
- AWS Lambda com Java — Documentação oficial
- AWS Lambda Java SDK
- Maven Shade Plugin
- Amazon Corretto 17 (JDK)
Desenvolvido com ☕ Java 17 + AWS Lambda