10.2022 - 02.2023
The main goal was to migrate existing application environments from Heroku to AWS. First, we had to audit the existing resources in Heroku, SemaphoreCI and Cloudflare. More specifically, what services the application uses, how it is built, and what dependencies exist between services and microservices. Then we had to check what resources existed in AWS because they were already created and the application also used them. The next step was the selection of AWS services that can fully replace what was created in Heroku and designing an architecture that meets the best practices regarding security, reliability and scalability. Then implement it and transfer the development environment to check how the application will behave in this environment. In addition, the entire CI/CD process and monitoring of all services had to be prepared for the AWS environment.
After completing the audit, and preparing the architecture of the entire infrastructure, we were ready to work. Using the Terragrunt tool, we started to create individual elements of the infrastructure while containerizing applications from Heroku, because we decided to choose ECS Fargate as the place to host the application. So we started creating individual infra elements:
After creating the elements required by the applications, we started to transfer the application to ECS. In ECS, we have created services for each element of the application and connected ALB, if a given service required it. After connecting each part of the application, the application worked as it should, and any errors in the application configuration were caught using CloudWatch because each application had its log streams created there. While the application was being tested by QA, we set about creating a CI/CD process for the new environment from the SemaphoreCI tool already existing in the project. It was our first contact with this tool, but luckily it turned out to be intuitive like the rest of the tools of this type known to us and the differences in the yaml syntax were not that big, so we built the entire process of building and deploying applications on ECS and S3+Cloudfront quite efficiently.
Problems that we had to deal with during the projects :
We have created a simple but efficient infrastructure that met the client's requirements. Heroku environments have been fully migrated to AWS, and the entire infrastructure has been created using code (Terragrunt). The environment is fully automated and does not require our intervention or assistance in the daily work of developers.