- Published on
Deploying a Spring Boot Docker Container To Elasticbeanstalk
- Authors
- Name
- Yair Mark
- @yairmark
This article describes pretty well how to get the initial setup working in general.
But to get this working for Spring Boot and catering for secrets I had to do a few more things.
Initial Setup
As per the article linked above to setup initially, you will have to:
- Once Off
- Setup an AWS account
- Install the Elasticbeanstalk CLI
- Per Project Once Off
- Ensure you have a Dockerfile in the root of your project
- Make an
application-prod.properties
file. Add the valueserver.port=80
. With Docker deploys EB seems to have 80 as the port to the container. - In your elasticbeanstalk application configuration add the property:
spring.profile
and valuedefault,prod
- When running
eb create
say yes to the option for setting up ssh. This will make it much easier later to tail logs and other things
Tweaking the Config For Spring Boot
You will need to update the health probe so that it checks /actuator/health
and not /
(the default). To do this:
- Go to your environment's dashboard
- Click "Configuration" in the left menu
- Scroll down to "Load balancer" and click "edit"
- Scroll up to the "Processes" section
- Click the checkbox next to the "default" process
- Click "Actions" and "Edit"
- Under "Health check" change the "Path" to
/actuator/health
- Click "Save"
- Finally click "Apply" at the bottom of the page for the changes to take effect
Managing Your Environment
Generally, you will be doing everything from the environment's main page:
- To get there:
- Switch to the region your environment is in (this is done with a dropdown on the top left-hand side
- Click "Environments" on the left menu
- Click the "Environment Name" of the environment you want
From the environment main page:
- View the overall health
- Click "Causes" to debug things like deployment issues, sudden shutdowns and startups
- See running logs:
- Click "Logs" from the menu on the left
- From the cli you can also use
eb logs --stream
- You can also
eb ssh
to login and tail logs there on the docker image:docker logs <imageId>
- You can also
Stopping the Environment
Unfortunately, there is no stop/start button.
There is luckily a workaround as described here
- Set desired instances to 0
- The time is in UTC+0 so remember to work with that
- Set the time to 5 minutes from now t give EB enough time to propagate the changes
- You should see changes pending in green and the UTC time in the right column
- Click "Apply" for the changes to start propagating
You can leave the "Schedule Action" there and simply edit the time and date when you want to use them again.
I needed this step in order to inject environment variables into a build that was failing from the start. If you do no stop the service first, EB rolls back your environment variables.
Errors
On Gradle Build Failure For Kotlin Step - UnmarshalException
Fix this as described here. Basically, run your Gradle build as follows:
gradle build -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false
Update your Dockerfile to build using the above line.