Django ECS Deployments
An AWS code pipeline is created for each Django application. This pipeline is responsible for deploying the infrastructure and the application code. The pipeline is triggered when a new commit is pushed to the specified branch of the application's repository.
Django Monolith ECS with Database

Static Files
Static files of the Django application are deployed to an S3 bucket. The deployed bucket is private and all static files are served using CloudFront.
Load Balancing
An application load balancer is used to route traffic to the ECS service running the Django application. For security, the load balancer is placed in a public subnet and is only accessible from the internet through CloudFront.
ECS Servers
ECS servers handle API requests and other server-side logic for the Django application. The Zonké dashboard exposes the capability to scale the number of ECS servers based on application traffic. You have the option to use Fargate or EC2 instances for the ECS servers. For security, deployed ECS servers are placed in a private subnet and are not directly accessible from the internet.
Secrets
Secrets are stored in AWS Secrets Manager and are exposed to the ECS servers as environment variables. The Zonké
dashboard allows you to add, update, and delete secrets for the Django application. Secrets are only stored in your
AWS account and are encrypted at rest and in transit. The Django application can access these secrets using the
os.getenv
object and directly from Secrets Manager.
Database
The Django application can be connected to a database. The database is deployed using RDS and is accessible from the ECS servers. Database credentials are stored in AWS Secrets Manager and, just like other service secrets, they are exposed to the ECS servers as secrets. The database is placed in an isolated subnet and is only accessible from the ECS servers.
Database Migrations
Django applications run database migrations during deployment. A migration ecs function is created and triggered by the pipeline during application deployment. You do not need to configure anything in your codebase to run migrations.