Skip to main content

Spring Boot to AWS Elastic Beanstalk

Beanstalk is an AWS-managed service that allows applications to run containerized in AWS. I am using Elastic Beanstalk (EB) to deploy quickly developed applications when the emphasis is on time-to-market rather than all the features of an enterprise application.

For the purpose of this post, I will use the application called Genova as an example. It is a web application that exposes HTML and JSON content.

Step 1 - Create a Spring Profile for AWS Beanstalk

The configuration of Spring Boot application is applications-<profile>.yml files that are in the src/main/resources folder.

By default, an EB deployment listens to the port 5000. For this reason I am creating the file application-eb.yaml with the following content:

server:
 port: 5000

Step2 - Build the Spring Boot Application

Using maven to create the Spring Boot jar file:

mvn clean package -DskipTests

This command creates a file with the name genova-1.0.0-SNAPSHOT.jar  in the target folder.

Step 3 - Create the Elastic Beanstalk Application and Environment in AWS

Log in to the AWS console, select AWS Elastic Beanstalk, and start the wizard to create a new application.

Then, create a new Environment for this application. I am choosing the Java platform:




Other parameters:

  • Single instance
  • Loading from a local file
  • Root volume type - General Purpose 3 (SSD)
  • IMDSv1 - Deactivated

Environment variables:

  • Important: add the aws-eb profile, this will set the server port

Step 4 - Create the DNS Entry for the EB Deployment

Go to AWS Route 53, select the zone, add an A record pointing to the EB-generated endpoint:

Step 5 - Run the Application

The application is now deployed, running in AWS EB:

Step 6 - Pause the Environment

To save money, this environment configuration can be saved and quickly re-created later.

Select the environment, then select Actions -> Save Configuration.

Select the environment, then select Actions -> Terminate Environment.

Appendix

Notes:

  • The application is now running on port 80, unsecured
  • The deployment is running on a single instance
  • These can be addressed by creating a load-balanced EB environment with multiple instances running in separate availability zones.


Popular posts from this blog

View - A Functor for Web App Design

This blog is about practical applications of Category Theory to the development of Java + Spring applications. I am looking at a design approach to simplify the development of web applications. Traditionally, this kind of back-office application is based on the Web 1.0 technology stack, using Spring Boot and Thymeleaf. My approach is to keep using Spring Boot but replace the generation of HTML with J2HTML and higher-order views. From a Category Theory point of view, we can look at web applications as mappings from the Category of Business Entities and the Category of UI Widgets. If we go one step further, both business entities and UI widgets are mapped to Java classes. Thus, we can view a web application (or a part of it) as an endofunctor in the Category of Java Classes. We define the View-functor as follows: domain(V) - Java classes representing business entities - e.g., Invoice, User - and, codomain(V) - Java functions that render the business entity as a DomContent object (DomCont...

Performance Testing a New CRM

Performance testing  is challenging, frustrating, often underestimated typically getting attention only after an incident. How did we the performance test and what did we learn during the development and implementation of  web-services for a new CRM system?

On Defining Messages

“Defining Message Formats” is the title of a message posted on the Service Oriented Architecture mailing list [1]  which attracted a lot of attention.  The post summarizes  the dilemma faced by solution architects when they have to define a service interface: 1. Base the internal message format on the external message standard (MISMO for this industry). This message set is bloated, but is mature, supports most areas of the business, and is extensible for attributes specific to this company and its processes. 2. Create an XML-based message set based on the company's enterprise data model, which the company has invested a great amount of money into, and includes a very high percentage of all attributes needed in the business. In a nutshell, we've generated an XML Schema from ER Studio, and will tinker with that construct types that define the payloads for messages. 3. Use MISMO mainly for its entity definitions, but simplify the structure to improve usability. We benefit fr...