CI/CD Case Study
Migrated consumer goods delivery company from EC2 to Fargate with automated deployment
Ollie is on a mission to improve the lives of pets everywhere through better nutrition. The startup offers subscriptions of human-grade fresh dog food that is delivered directly to your door. Once they had outgrown their individual EC2 instances and manual deployment methods, they needed to upgrade to automated, containerized systems. With a great development team but little devops best practices expertise, they sought help updating to a modern architecture.
Individual application instances were a single point of failure, each with a specific purpose instead of being replaceable and temporary. Developers spent time deploying manually to the servers, which meant less time available for product improvement. System upgrades were also difficult because instances could not be taken offline easily without disrupting their intended tasks. Lastly, development environments were out of sync due to configuration drift, and pushing code was a combination of manual steps and Ansible tasks.
To avoid disruption to the development team and allow ample time for the company’s engineers to receive training in Docker and containerized environments, we took a two-phased approach. First, we transitioned to an environment defined with configuration templates that could be deployed repeatedly. Then, we trained the team and upgraded to containers.
- Standardize Immutable Infrastructure
Special cases and functionality were removed from individual instances and moved to workers or distributed across all instances built from the same image. Every resource was defined in CloudFormation so that building environments, instances, data stores like elasticache, CloudFront and Load balancers became a consistent, predictable process.
- Clearly Defined Deployment Process
Deployment Scripts required some clean up and consolidation to avoid duplication. The Ansible scripts used for manual delivery to production were reorganized and consolidated. The Ollie team could now consistently manage scaling and testing of their application with structured methods. This prepared them for automated deployment by making the documented process easy and predictable.
- Automate Deployment with a CI/CD Pipeline
With a manual process to promote application code to production, a continuous integration and delivery pipeline was a natural next step. The codebase was migrated to Docker and the development team was trained in docker-compose. The applications were then deployed to ECS Fargate for container orchestration and CodePipeline to deploy on merges to the main branch.
From a homegrown environment of resources launched from the console to a fully automated CI/CD pipeline, Ollie’s engineers can now focus on product features instead of managing infrastructure. Automated deploys limit human error and ensure that integration and delivery are consistent. Standardized components defined in code ensure an easily managed and understood system by members of the team.