Setup RDS Database and Build Backend Application Docker Image — Deploy to AWS ECS Fargate with Load Balancer (Part 1)
Before getting started with setting up AWS ECS Fargate with Load Balancer, let’s get a backend server and create a docker image of it. As I being a Python developer, I am creating a FastAPI application with few API endpoints.
Setup Database
For database, let’s setup a postgresql db instance in AWS RDS.
1. Login to AWS console and go to Amazon RDS dashboard.
2. Click on Create Database button.
3. Create database:
Note: For demo purpose, I will be using free-tier Postgres instance with Password Authentication enabled and all the additional backup, autoscaling, encryption, monitoring, etc. disabled. Please enable the plans based on your requirements.
Section 1. Choose a database creation method: Select Standard create.
Section 2. Engine Options: Select PostgreSQL.
Section 3. Templates: Select Free tier.
Section 5. Settings:
a. DB Instance Identifier: Name your instance. [Name: ecs-fargate-db]
b. Master username: Default is postgres. If you would like to have username other than postgres, add username. It will be login ID for your instance.
c. Master password: Type the password.
d. Confirm password: Type Master password.
Note: Please be sure you store master username and password
Section 7. Storage: Increase Allocated storage if required and Disable autoscaling.
Section 8. Connectivity:
a. Virtual Private Cloud: Default VPC.
b. Subnet group: default
c. Public access: Select Yes if you want to access from outside VPC else select No. Note: Can be controlled from Security Group.
d. VPC security group: Create new and name New VPC security group.
[Name: ecs-fargate-db-SG]
Section 10. Additional configuration:
a. Add initial database name if required, else postgres database is created by default. [Initial Database Name: ecs_alb_db]
b. Disabled Backup, Encryption, Performance Insights, Monitoring, Log Exports, Maintenance, Deletion Protection.
4. Once database instance is created successfully, you can view the connection details on success message toaster and note down password and endpoint.
Note: Endpoint will be used as DB Host.
Build Docker Image of backend server
Here, I have created a FastAPI application and added DB credentials to .env file.
Note: Do not forget to add health check API to the server.
Let’s jump into containerizing the backend application.
1. Add a Dockerfile
2. Build Image
Run the command on project’s root directory.
docker build -t ecs-alb-image .
The command will build an image with name `ecs-alb-image` and tag `latest`.
~ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ecs-alb-image latest 4f8e343e2a11 8 minutes ago 536MB
3. Run Image
Run the image locally to test if the server is running and functioning as desired.
~ docker run -it -p 8000:8000 --rm ecs-alb-image:latest
Thanks to FastAPI providing API documentation by default.
Here, I conclude Part 1 with setting up database in Amazon RDS, dockerizing backend application and building its image.
In order to get your docker image pushed into Amazon Elastic Container Registry (ECR), follow my next article Part 2.
If you have any suggestions for improvements or some better way to enhance, feel free to comment below or send me an email at sumedhshakya11@gmail.com
Thanks for reading! Hope this was helpful.