Get Started

Deploy Spring Boot with LaunchFlow


Deploy a Spring Boot application to AWS Fargate with LaunchFlow.

View the source code for this guide in our examples repo.

0. Set up your Spring Boot Project

If you already have a Spring Boot Project you can skip to step #1.


Create a new Spring Boot Application

1
spring init --dependencies=web launchflow-springboot
2
cd launchflow-springboot

Update src/main/java/com/example/demo/DemoApplication.java to include a simple REST controller:

1
package com.example.demo;
2
3
import org.springframework.boot.SpringApplication;
4
import org.springframework.boot.autoconfigure.SpringBootApplication;
5
import org.springframework.web.bind.annotation.GetMapping;
6
import org.springframework.web.bind.annotation.RestController;
7
8
@SpringBootApplication
9
@RestController
10
public class DemoApplication {
11
12
public static void main(String[] args) {
13
SpringApplication.run(DemoApplication.class, args);
14
}
15
16
@GetMapping("/")
17
public String hello() {
18
return "Hello from " + System.getenv("LAUNCHFLOW_ENVIRONMENT");
19
}
20
}

Create a Dockerfile in the root of your project:

1
FROM public.ecr.aws/docker/library/openjdk:17-jdk-slim as build
2
WORKDIR /workspace/app
3
4
COPY mvnw .
5
COPY .mvn .mvn
6
COPY pom.xml .
7
COPY src src
8
9
RUN ./mvnw install -DskipTests
10
RUN mkdir -p target/dependency && (cd target/dependency; jar -xf ../*.jar)
11
12
FROM public.ecr.aws/docker/library/openjdk:17-jdk-slim
13
WORKDIR /app
14
VOLUME /tmp
15
ARG DEPENDENCY=/workspace/app/target/dependency
16
COPY --from=build ${DEPENDENCY}/BOOT-INF/lib /app/lib
17
COPY --from=build ${DEPENDENCY}/META-INF /app/META-INF
18
COPY --from=build ${DEPENDENCY}/BOOT-INF/classes /app
19
20
ENV PORT=80
21
EXPOSE $PORT
22
ENTRYPOINT ["java","-cp","app:app/lib/*","com.example.demo.DemoApplication"]

1. Initialize Launch Flow

If you're deploying an existing app, ensure you have a Dockerfile in your project that builds and runs your Spring Boot application.

Install the LaunchFlow Python SDK and CLI using pip.

1
pip install launchflow[aws]

Initialize LaunchFlow in your project

1
lf init --backend=local
  • Name your project
  • Select Yes for creating an example infra.py
  • Select AWS for your cloud provider
  • Select ECS Fargate for your service

Once finished you will get an infra.py that looks like:

1
import launchflow as lf
2
3
# ECSFargateService Docs: https://docs.launchflow.com/reference/aws-services/ecs-fargate
4
api = lf.aws.ECSFargateService(
5
"my-ecs-api",
6
dockerfile="Dockerfile", # Path to your Dockerfile
7
)

ECSFargateService will build your Dockerfile and deploy to ECS Fargate. You can provide additional fields to ECSFargateService to configure things like machine type, num instances, or even a custom domain.


2. Deploy your Service

Make sure you have local AWS credentials set up before deploying.

1
lf deploy
  • Name your environment (dev is a good first name)
  • Select your cloud provider AWS
  • Confirm the resources to be created
  • Select the service to deploy

Once complete you will see a link to your deployed service on ECS Fargate.

Deploy ECS Fargate

3. Cleanup your Resources

Optionally you can delete all your resources, service, and environments with:

1
lf destroy
2
lf environments delete

4. Visualize, Share, and Automate

LaunchFlow Cloud Console

LaunchFlow Cloud usage is optional and free for individuals.

Using the local backend like we did above works fine for starting a project, but doesn't offer a way to share state between multiple users. LaunchFlow Cloud is a web-based service for managing, sharing, and automating your infrastructure. It's free small teams and provides a simple, secure way to collaborate with your team and automate your release pipelines.

Sign up for LaunchFlow Cloud and connect your local environment by running:

1
lf init --backend=lf

This will create a project in your LaunchFlow Cloud account and migrate your local state to the LaunchFlow Cloud backend.


What's next?

Previous
Svelte