Skip to main content

AWS Microservices Migration & Cost Optimization

Tech: .NET Core, AWS SQS, Lambda, API Gateway, Fargate, ECS, Terraform

Context: Legacy Classic ASP/.NET 4.6.1 app with rising ops costs, brittle release cycles, and scaling challenges.

Approach: Domain assessment → microservice decomposition → serverless patterns (SQS/Lambda) where fit → containers on Fargate/ECS for others. Introduced CI/CD with CodeBuild/CodePipeline and Infra as Code.

What changed: Work that used to happen inline during a request became messages on a queue, so a slow or failing consumer stopped being an outage and became a backlog with a dead-letter queue behind it. Capacity followed load instead of being provisioned for the worst hour of the month, and infrastructure became a file in the repository rather than a configuration somebody remembered making.

What it cost: Queue-backed decomposition buys resilience by giving up the thing a monolith gives away free — a single place to look when something is wrong. Every asynchronous boundary needs idempotent handlers, because at-least-once delivery means a message arrives twice eventually, and it needs correlation IDs threaded through, or a failed operation is spread across four services with nothing joining them up. That work is not optional and it is not visible in a diagram.