Skip to main content

Java Quarkus on AWS Tutorial

Quarkus is a Kubernetes-native Java framework tailored for GraalVM and OpenJDK HotSpot, making it a great choice for building cloud-native applications. This tutorial will guide you through deploying a simple Quarkus application on AWS.


1. Prerequisites​

Before getting started, ensure you have the following installed:

  • Java JDK (11 or later): Download it from AdoptOpenJDK or Oracle.
  • Apache Maven: Install Maven from Apache Maven.
  • AWS CLI: Install the AWS Command Line Interface from AWS CLI Installation.
  • AWS Account: Sign up for an AWS account if you don't have one.

Verify Installation​

To check your installations, run the following commands:

java -version
mvn -version
aws --version

2. Creating a New Quarkus Project​

You can create a new Quarkus project using the Quarkus CLI or Maven.

Using the Quarkus CLI​

Run the following command to create a new project:

quarkus create app org.acme:aws-demo --no-code
cd aws-demo

Using Maven​

Alternatively, you can use Maven to generate a new project:

mvn io.quarkus:quarkus-maven-plugin:2.4.2:create     -DgroupId=org.acme     -DartifactId=aws-demo     -Dextensions="resteasy,resteasy-jackson,quarkus-amazon-lambda"
cd aws-demo

Project Structure​

After creating the project, the structure will look like this:

aws-demo
├── src
│ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ └── acme
│ │ │ └── aws
│ │ │ └── GreetingResource.java
│ │ └── resources
│ │ └── application.properties
└── pom.xml

3. Creating a Simple REST Endpoint​

Create a new Java class named GreetingResource.java in the src/main/java/org/acme/aws directory:

package org.acme.aws;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/hello")
public class GreetingResource {

@GET
@Produces(MediaType.APPLICATION_JSON)
public String hello() {
return "{"message": "Hello, AWS with Quarkus!"}";
}
}

Explanation​

  • @Path: Defines the URI path for the resource.
  • @GET: Indicates that this method responds to HTTP GET requests.
  • @Produces: Specifies the media type returned by the method.

4. Running Your Application Locally​

To run your Quarkus application in development mode, use the following command:

./mvnw quarkus:dev

Accessing the Endpoint​

Once the application is running, open your web browser or a tool like curl to access the endpoint:

http://localhost:8080/hello

You should see the output:

{"message": "Hello, AWS with Quarkus!"}

5. Preparing for AWS Lambda​

Adding AWS Lambda Dependencies​

Make sure your pom.xml includes the necessary dependencies for AWS Lambda. Add the following dependencies:

<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-amazon-lambda</artifactId>
</dependency>

Configuring Application Properties​

Configure the AWS Lambda function in src/main/resources/application.properties:

quarkus.lambda.handler=org.acme.aws.GreetingResource::hello

6. Building the Application for AWS Lambda​

To build your application as a native image for AWS Lambda, run the following command:

./mvnw package -Pnative -Dquarkus.native.container-build=true

This will create a native executable in the target directory.


7. Deploying to AWS Lambda​

Step 1: Create a Lambda Function​

Use the AWS CLI to create a new Lambda function:

aws lambda create-function --function-name quarkus-aws-demo   --runtime provided.al2   --handler org.acme.aws.GreetingResource::hello   --zip-file fileb://target/aws-demo-1.0.0-runner.zip   --role arn:aws:iam::<your-account-id>:role/<your-lambda-role>   --region <your-region>

Make sure to replace <your-account-id>, <your-lambda-role>, and <your-region> with your actual AWS account ID, the IAM role for Lambda, and your preferred AWS region.

Step 2: Testing the Lambda Function​

You can test your Lambda function using the following command:

aws lambda invoke --function-name quarkus-aws-demo output.json

Check the contents of output.json for the result.


8. Conclusion​

This tutorial provided an introduction to creating a Java Quarkus application that can be deployed on AWS. You learned how to set up a Quarkus project, create a REST endpoint, and prepare your application for deployment on AWS Lambda.

Further Reading​

Content Review​

The content in this repository has been reviewed by chevp. Chevp is dedicated to ensuring that the information provided is accurate, relevant, and up-to-date, helping users to learn and implement programming skills effectively.

About the Reviewer​

For more insights and contributions, visit chevp's GitHub profile: chevp's GitHub Profile.