Deploy Spring Boot App on AWS – Elastic Beanstalk

AWS (Amazon Net Companies) is likely one of the most generally used cloud computing platforms which gives an entire vary of managed cloud companies. On this tutorial, I’ll present you step-by-step to deploy Spring Boot Utility with MySQL on AWS EC2 Occasion utilizing Elastic Beanstalk (totally free).

Associated Posts:
– Spring Boot, Spring Information JPA – Constructing Relaxation CRUD API instance
– Spring Boot Token primarily based Authentication with Spring Safety & JWT
– Dockerize with Docker Compose: Spring Boot and MySQL instance

Overview

AWS gives a free tier to expertise its companies totally free in 1 yr. And you may observe the step-by-step on this tutorial with out caring about pricing.

You might want to go to Amazon AWS and join AWS free tier first.
And we’re gonna do these steps:

  • Set up Elastic Beanstalk CLI (EB CLI)
  • Initialize Beanstalk for Spring Boot software
  • Configure setting for MySQL in AWS RDS database
  • Deploy and check the appliance

What’s AWS Elastic Beanstalk?

Elastic Beanstalk gives approach to shortly deploy and handle Go, Java, .NET, Node.js, PHP, Python, or Ruby functions within the AWS Cloud.

We don’t must to be taught concerning the infrastructure which runs the functions. Simply add the appliance, Elastic Beanstalk routinely handles the main points of capability provisioning, load balancing, scaling, and software well being monitoring.

After we deploy your software, Elastic Beanstalk builds the chosen platform model and provisions a number of AWS assets, corresponding to Amazon EC2 situations, to run your software.

To work together with Elastic Beanstalk, we will use the Elastic Beanstalk console, the AWS Command Line Interface (AWS CLI), or EB CLI.

On this tutorial, we select Elastic Beanstalk Command Line Interface.

Step 0: Get Spring Boot Utility to deploy on AWS

Let’s use a Spring Boot CRUD Restful Apis that works with MySQL database. You’ll be able to obtain the supply code at Github.

$ git clone https://github.com/bezkoder/spring-boot-data-jpa-mysql.git

This Spring Boot App comprises a Relaxation service in addition to MySQL database. That helps you perceive the way to deploy a Restful Net Service on AWS as a substitute of easy Whats up World.

The appliance exports APIs as following:

Strategies Urls Actions
POST /api/tutorials create new Tutorial
GET /api/tutorials retrieve all Tutorials
GET /api/tutorials/:id retrieve a Tutorial by :id
PUT /api/tutorials/:id replace a Tutorial by :id
DELETE /api/tutorials/:id delete a Tutorial by :id
DELETE /api/tutorials delete all Tutorials
GET /api/tutorials/revealed discover all revealed Tutorials
GET /api/tutorials?title= discover all Tutorials which title comprises key phrase

The tutorial exhibiting the way to construct this app might be discovered at:
Spring Boot, Spring Information JPA – Constructing Relaxation CRUD API instance

Step 1: Set up EB CLI (Elastic Beanstalk Command Line Interface)

The AWS Elastic Beanstalk Command Line Interface is a command line shopper gives methods to create, configure, handle, monitor Elastic Beanstalk environments.

The EB CLI requires Python model 2.7, 3.4, or later that you may obtain at https://www.python.org/downloads/.

Run the next command:

$ pip set up awsebcli --upgrade

--upgrade: to improve any necessities which are already put in.

Step 2: Initialize Beanstalk mission for Spring Boot software

To initialize an EB CLI mission, open command immediate at Spring Boot App root folder, then run the command eb init.

Choose a default area
1) us-east-1 : US East (N. Virginia)
2) us-west-1 : US West (N. California)
3) us-west-2 : US West (Oregon)
4) eu-west-1 : EU (Eire)
5) eu-central-1 : EU (Frankfurt)
6) ap-south-1 : Asia Pacific (Mumbai)
7) ap-southeast-1 : Asia Pacific (Singapore)
8) ap-southeast-2 : Asia Pacific (Sydney)
9) ap-northeast-1 : Asia Pacific (Tokyo)
10) ap-northeast-2 : Asia Pacific (Seoul)
11) sa-east-1 : South America (Sao Paulo)
12) cn-north-1 : China (Beijing)
13) cn-northwest-1 : China (Ningxia)
14) us-east-2 : US East (Ohio)
15) ca-central-1 : Canada (Central)
16) eu-west-2 : EU (London)
17) eu-west-3 : EU (Paris)
18) eu-north-1 : EU (Stockholm)
19) ap-east-1 : Asia Pacific (Hong Kong)
20) me-south-1 : Center East (Bahrain)
(default is 3):

You’ll be able to select any area above, or simply enter for default: us-west-2.

Then use your AWS Entry Id and AWS Secret Key. If you happen to don’t know the place they’re, simply go to Identification and Entry Administration (IAM).

deploy-spring-boot-app-aws-beanstalk-eb-init

Simply kind your title, press Enter button to pick the appliance.
Now we have to select platform:

Choose a platform.
1) Python (BETA)
2) Docker (BETA)
3) Ruby (BETA)
4) Go (BETA)
5) Node.js (BETA)
6) PHP (BETA)
7) Node.js
8) PHP
9) Python
10) Ruby
11) Tomcat
12) IIS
13) Docker
14) Multi-container Docker
15) GlassFish
16) Go
17) Java
18) Corretto (BETA)
19) Packer
(default is 1): 17

Sort 17 to pick Java, then 1 for Java 8.

Then no for CodeCommit, and Sure for SSH to proceed with SSH setup if it is advisable login to EC2 situations.

We additionally create an SSH KeyPair: bezkoder-app-key.

deploy-spring-boot-app-aws-beanstalk-select-platform

OK, accomplished! simply go to the following step.

Step 3: Configure Deployment for Spring Boot Utility

Now Elastic beanstalk will routinely create a configuration file in Spring Boot mission listing: .elasticbeanstalk/config.yml.

branch-defaults:
  grasp:
    setting: null
    group_suffix: null
international:
  application_name: spring-boot-data-jpa-mysql
  department: null
  default_ec2_keyname: bezkoder-app-key
  default_platform: Java 8
  default_region: us-west-2
  include_git_submodules: true
  instance_profile: null
  platform_name: null
  platform_version: null
  profile: eb-cli
  repository: null
  sc: git
  workspace_type: Utility

Our software shall be constructed as jar package deal. So we add configuration for the deployment as beneath:

deploy:
  artifact: goal/spring-boot-data-jpa-0.0.1-SNAPSHOT.jar

The spring-boot-data-jpa is the artifact of our software and 0.0.1-SNAPSHOT is the model.
spring-boot-data-jpa-0.0.1-SNAPSHOT.jar file shall be generated within the goal folder once we package deal the Spring Boot software with the command:

$ mvn clear package deal spring-boot:repackage

Step 4: Configure setting for Spring Boot with MySQL on AWS

Let’s create an Elastic Beanstalk setting with the command:

$ eb create --single --database

As a result of an elastic beanstalk software might have a number of environments, we use --single for a single EC2 occasion and an RDS database. If not, a number of situations shall be created with a load balancer which value our cash.

$ eb create --single --database
Enter Atmosphere Title
(default is spring-boot-data-jpa-mysql-dev): spring-boot-dev
Enter DNS CNAME prefix
(default is spring-boot-dev):

Would you prefer to allow Spot Fleet requests for this setting?
(y/N): N

Now kind username and password for the RDS database:

Enter an RDS DB username (default is "ebroot"): boot
Enter an RDS DB grasp password:
Retype password to substantiate:

The console reveals:

Importing: [##################################################] 100% Carried out...
Atmosphere particulars for: spring-boot-dev
  Utility title: spring-boot-data-jpa-mysql
  Area: us-west-2
  Deployed Model: app-cf24-200408_183238
  Atmosphere ID: e-tbmssip4un
  Platform: arn:aws:elasticbeanstalk:us-west-2::platform/Java 8 operating on 64bit Amazon Linux/2.10.4
  Tier: WebServer-Customary-1.0
  CNAME: spring-boot-dev.us-west-2.elasticbeanstalk.com
  Up to date: 2020-04-08 11:33:04.032000+00:00
Printing Standing:
2020-04-08 11:33:03    INFO    createEnvironment is beginning.
2020-04-08 11:33:04    INFO    Utilizing elasticbeanstalk-us-west-2-668363982883 as Amazon S3 storage bucket for setting statistics.
2020-04-08 11:33:25    INFO    Created safety group named: awseb-e-tbmssip4un-stack-AWSEBSecurityGroup-T3UYE8P9CGUY
2020-04-08 11:33:40    INFO    Creating RDS database named: aazuzc8hjztxex. This may increasingly take a couple of minutes.
2020-04-08 11:33:40    INFO    Created EIP: 54.185.147.178
2020-04-08 11:40:05    INFO    Created RDS database named: aazuzc8hjztxex

Let’s open AWS Console with the command:

$eb console

You’ll be able to see our Elastic Beanstalk setting:

deploy-spring-boot-app-aws-beanstalk-eb-environment

It might probably change to Warning or Extreme. Don’t fear, we have to set some configuration.

Click on Configuration tab on the left facet, the database reveals the knowledge as following:

deploy-spring-boot-app-aws-beanstalk-eb-rds-database

By default, Spring Boot functions will pay attention on port 8080. Elastic Beanstalk assumes that the appliance will pay attention on port 5000. So we’ll change the port the Spring Boot software listens on.

Let’s use eb setenv for the work:

$ eb setenv SERVER_PORT=5000

Let’s use eb setenv with endpoint and port within the picture above, username and password we’ve set earlier than:

SPRING_DATASOURCE_URL=jdbc:mysql:///ebdb
SPRING_DATASOURCE_USERNAME=
SPRING_DATASOURCE_PASSWORD=
SPRING_JPA_HIBERNATE_DDL_AUTO=replace
SPRING_JPA_DATABASE_PLATFORM=org.hibernate.dialect.MySQL5Dialect
$ eb setenv SPRING_DATASOURCE_URL=jdbc:mysql://aazuzc8hjztxex.cuu9yoekn2fa.us-west-2.rds.amazonaws.com:3306/ebdb SPRING_DATASOURCE_USERNAME=root SPRING_DATASOURCE_PASSWORD=12345678 SPRING_JPA_HIBERNATE_DDL_AUTO=replace SPRING_JPA_DATABASE_PLATFORM=org.hibernate.dialect.MySQL5Dialect

The console reveals:


2020-04-08 12:03:03    INFO    Atmosphere replace is beginning.
2020-04-08 12:03:11    INFO    Updating setting spring-boot-dev's configuration settings.
2020-04-08 12:04:33    INFO    Efficiently deployed new configuration to setting.

Now open AWS Console, in Configuration tab, click on on Edit button in Software program Class, we will see all of Atmosphere properties right here:

deploy-spring-boot-app-aws-beanstalk-eb-env-properties

Step 5: Deploy the Spring Boot software to AWS

Now we simply run the command for deploying the Spring Boot software to the situations within the Elastic Beanstalk setting.

$ eb deploy
Importing: [##################################################] 100% Carried out...
2020-04-08 12:16:42    INFO    Atmosphere replace is beginning.
2020-04-08 12:16:46    INFO    Deploying new model to occasion(s).
2020-04-08 12:17:05    INFO    New software model was deployed to operating EC2 situations.
2020-04-08 12:17:05    INFO    Atmosphere replace accomplished efficiently.

Test the AWS Console:

deploy-spring-boot-app-aws-beanstalk-eb-deploy-environment

If you wish to deploy with a label model, simply use: eb deploy --label [your-version].
If the label has already been used, the EB CLI redeploys the earlier model with that label.

For instance:

eb deploy --label v01
Importing: [##################################################] 100% Carried out...
2020-04-08 12:22:42    INFO    Atmosphere replace is beginning.
2020-04-08 12:22:46    INFO    Deploying new model to occasion(s).
2020-04-08 12:23:04    INFO    New software model was deployed to operating EC2 situations.
2020-04-08 12:23:04    INFO    Atmosphere replace accomplished efficiently.

deploy-spring-boot-app-aws-beanstalk-eb-deploy-version

Step 6: Check the appliance

That is the ultimate part of the tutorial, we’re gonna use Postman to check the Spring Boot Relaxation Apis which was deployed on AWS.

– Create an object:

deploy-spring-boot-app-aws-beanstalk-rest-api-create

– Retrieve all objects:

deploy-spring-boot-app-aws-beanstalk-rest-api-retrieve

– Replace an object:

deploy-spring-boot-app-aws-beanstalk-rest-api-update

– Discover objects by discipline:

deploy-spring-boot-app-aws-beanstalk-rest-api-find

Conclusion

As we speak we’ve accomplished many issues for deploying Spring Boot Utility on AWS EC2 Occasion utilizing Elastic Beanstalk. Now you possibly can:

  • Set up EB CLI and setup AWS Beanstalk setting
  • Create database, configure connection properties and set setting variables
  • Construct and deploy Spring Boot software on AWS
  • Check the appliance

You might must deal with Exception with:
Spring Boot @ControllerAdvice & @ExceptionHandler instance

Or Dockerize with Docker Compose: Spring Boot and MySQL instance

Additional Studying

Leave a Reply

Your email address will not be published. Required fields are marked *