Tutorials
Serverless API with Java and Redis
In this tutorial, we will build a stateful serverless API using Java and Redis on AWS Lambda. The API will simply count the page views and return it as HTTP response.
Prerequisites
- Install the Serverless Framework installed with an AWS account set up.
npm i serverless@3.39.0 -g- Install JDK and not Java JRE. Set your JAVA_HOME.
- Install Apache Maven.
- Create a free Serverless Redis database from Upstash as described here.
Project Setup
Create the project:
serverless create --template aws-java-maven --name counter-api -p aws-java-counter-apicd aws-java-counter-apiAdd jedis as dependency to the pom.xml:
pom.xml
... <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.6.0</version> </dependency>...Update serverless.yml as below:
serverless.yml
service: counter-apiframeworkVersion: '3'provider: name: aws runtime: java17package: artifact: target/hello-dev.jarfunctions: hello: handler: com.serverless.Handler events: - httpApi: path: /hello method: getCounter Function Setup
Update src/main/java/com/serverless/Handler.java as below:
src/main/java/com/serverless/Handler.java
package com.serverless;import java.util.Map;import com.amazonaws.services.lambda.runtime.Context;import com.amazonaws.services.lambda.runtime.RequestHandler;import redis.clients.jedis.Jedis;public class Handler implements RequestHandler<Map<String, Object>, ApiGatewayResponse> { @Override public ApiGatewayResponse handleRequest(Map<String, Object> input, Context context) { Jedis jedis = new Jedis("lasting-roughy-29092.upstash.io", 6379, true); jedis.auth("********"); Long value = jedis.incr("counter"); jedis.close(); String message = "Hello World, Count:" + value; return ApiGatewayResponse.builder() .setStatusCode(200) .setObjectBody(message) .build(); }}In the above code, you need to replace your Redis endpoint and password. You can copy Jedis connection code from the Upstash Redis Console -> Your Database -> Connect to your database -> Java.
Build and Deploy
Build your project:
mvn clean installDeploy to AWS:
serverless deployVisit the output URL to see the counter in action.