The application was originally built on Heroku. Heroku’s limited number of dynos (containers) made horizontally scaling during peak demand difficult, and it suffered from availability issues at times. Since Heroku doesn’t allow complete customization of its managed service platform, new features were difficult and time consuming to produce: IF feasible. Finally, the system had a lot of streaming content with network traffic they wanted an easier way to secure and observe.
Sela’s experts met with NowWith to review their organizational and product goals. Careful consideration had to be taken not to disrupt their running, production platform.
Sela started by performing an in-depth review of the existing platform, analyzing its usage, interfaces, and patterns. A TCO was performed using the AWS pricing calculator to estimate the cost of running the customer’s application on AWS. The Sela team found that the cost to operate on AWS was higher than the cost to run on Heroku, which the client had used prior to migration to AWS. The business value of the migration was based off the need for traceability, logging, and the ability to orchestrate and deploy microservices, which were high priority to the customer. Ultimately, the customer made the decision to migrate to AWS because the benefits outweighed the additional spend.
It was determined that a cloud-native, serverless, multi-account, AWS architecture would best achieve NowWith’s organizational and product goals. The new platform was built in parallel to production so there would be no chance of any disruption.
Separate accounts were set up for logging, shared services, development, testing, and production workload components split up by stages. This increased security by limiting the blast radii of search breaches, provided greater velocity for development teams, and better platform flexibility. Logs were sent to the shared logging account where they were stored on Amazon S3.
Amazon OpenSearch was deployed to detect security issues and report problems sooner, increasing observability and security. Infrastructure on the platform was deployed through code (IaC), using Terraform and GitHub actions. AWS Control Tower was implemented to standardize accounts.
Kubernetes was ruled out in favor of AWS and Amazon ECS. AWS Fargate clusters were used to make the platform more scalable and available. Workload features were rebuilt using AWS Lambda, Step Functions, Amazon Kinesis, Amazon SQS, and Amazon DynamoDB. Amazon Cognito and AWS SSO (now AWS IAM Identity Center) were used for authentication and role-based security.
Migrating NowWith’s platform from Heroku to an AWS cloud-native solution provided invaluable lessons to the Sela team in orchestrating a seamless transition from a more managed platform to a more customizable and versatile environment. This process highlighted the necessity of comprehensively understanding the platform’s architecture, dependencies, and resource requirements prior to the migration, and the responsibility of keeping NowWith’s business goals in mind when developing and designing a solution on AWS.
All horizontal scaling and availability issues related to infrastructure were resolved. Security was increased due to increased observability and the ability to secure traffic at a microservice and network level. The ability to stand up new environments was reduced to minutes from days. Environments were standardized, avoiding security and cost overrun issues. Heroku’s platform limitations were removed, allowing for ultimate flexibility in feature development on AWS.