The Contact List Application powers internal tooling for product and operations teams. To keep pace with feature delivery and seasonal load, the application evolved from a single virtual machine into a Kubernetes workload split across API, database, and worker microservices. This article documents the transformation and the playbooks that now keep the platform resilient.
The migration centred on five principles: declarative infrastructure, automated deployments, observability-first development, defence in depth, and cost transparency. Adhering to these pillars enabled every environment—development through production—to behave predictably while remaining easy to extend.
A dedicated Amazon EKS cluster hosts the workload. Helm charts manage service definitions, secrets use AWS Secrets Manager and External Secrets Operator, and Argo CD provides GitOps reconciliation. Traffic flows through AWS Application Load Balancer to an Nginx ingress controller, which routes requests to Flask API pods. Stateful workloads—MySQL and Redis—are deployed as managed services using Amazon RDS and ElastiCache for operational simplicity.
Every change starts as code review. Terraform plans, Helm linting, and Kubernetes policy checks run in pull requests, while integration tests execute against ephemeral preview environments. Once merged, Argo CD reconciles the desired state in minutes, and Grafana dashboards confirm success through automated synthetic checks.