PROFESSIONAL WORK · 2026
AWS Microservice Infrastructure and Integration
Contributed to a defined AWS-native microservice scope using TypeScript CDK, ECS Fargate, Aurora PostgreSQL, and Lambda, including infrastructure definitions, routing, authentication, and integration validation.
- AWS
- CDK
- ECS Fargate
- Aurora PostgreSQL
- Lambda
- TypeScript
This case study is a sanitized explanation of my contribution. Internal names, architecture details, and business information have been omitted or generalized.
Scope note · This case study covers my contribution to a defined service and infrastructure scope rather than ownership of the wider platform.
Context
Subledger Technology platform inside Asset & Wealth Management. The wider platform spans on-prem and multi-region AWS; this work focused on the AWS-native microservices slice and its supporting infrastructure-as-code, not on owning the broader platform.
Problem
New services needed a consistent, repeatable way to ship on AWS - networking, container runtime, database access, auth, and tests - without each team re-inventing the deployment shape per service.
Constraints
- Everything provisioned through code review, not the AWS console
- Services had to fit a hybrid model that spans on-prem and multi-region AWS
- Database access patterns had to suit a financial workload (durability, predictable failover)
- Integration tests had to run in CI against a representative environment, not against mocks only
My contribution
Contributed to
Implemented and contributed to defined service infrastructure and integration components using TypeScript CDK, ECS Fargate, Aurora PostgreSQL and Lambda.
Technical approach
- Defined service infrastructure in TypeScript CDK so reviewers could read the deployment shape in the same pull request as the code
- Ran services on ECS Fargate to avoid managing EC2 capacity and to keep deployments declarative
- Used Aurora PostgreSQL as the system of record, with schema and access patterns expressed through migrations
- Used Lambda for event-driven and asynchronous edges where running a long-lived container was overkill
- Wired routing and auth into the gateway layer as IaC rather than per-service ad-hoc configuration
- Added integration tests that exercise real AWS resources from CI to catch wiring mistakes before promotion
One important engineering decision
Decision
Express routing, auth, and integration-test scaffolding as part of the service's CDK stack instead of treating them as separate, hand-managed environment config.
Why
When routing and auth were managed outside the service, drift between environments was easy and reviewers could not see in one place what a service actually exposed. Putting it in CDK made the exposed surface reviewable in the same diff as the code.
Trade-off
Service authors had to learn the CDK conventions used by the platform, and small routing tweaks now went through code review instead of a console change - slower per change, but auditable.
Alternatives considered
- Console-driven networking, gateway routing, and auth configuration (faster initially, but invisible to source control and prone to drift between environments)
- Plain CloudFormation YAML instead of CDK (works, but loses the type-checking and shared abstractions that make TypeScript CDK reviewable across teams)
- Running services on EC2 instead of ECS Fargate (more control, but adds capacity management without a clear benefit for this workload)
Failure cases and edge cases
- Cold-start behaviour for Lambda paths on the asynchronous edges
- Aurora failover behaviour during planned maintenance windows
- Integration tests that passed in CI but pointed at a misconfigured environment resource
- Gateway routes that worked in one region but not another because of a region-scoped IaC parameter
Technologies used
- AWS
- AWS CDK (TypeScript)
- ECS Fargate
- Aurora PostgreSQL
- AWS Lambda
- API Gateway
Challenges
- Keeping the AWS-native slice consistent with on-prem services in the hybrid model
- Making integration tests against real AWS resources reliable enough to gate releases
- Encoding routing and auth as IaC without making service authors' day-to-day changes painful
Verified outcome
Services in the scope I contributed to landed with a consistent, reviewable deployment shape on AWS, and routing, auth, and integration tests lived alongside the service code in version control rather than in console configuration.
What I learned
Infrastructure that is reviewable in the same diff as the code is easier to reason about than infrastructure managed in a console, particularly when the same change has to ship across regions.
What I would improve
I would invest more in a shared CDK construct library that captures the routing, auth, and integration-test scaffolding as one reusable unit, so a new service can opt into the platform defaults with a few lines instead of copying patterns across stacks.
Ownership breakdown
Wider system context
- The wider Subledger Technology platform spanning on-prem and multi-region AWS is owned by the broader team, not by me
My contribution
- Conventions for routing and auth expressed as IaC
Components I personally implemented
- Service infrastructure-as-code in TypeScript CDK within my scope
- Containerised services on ECS Fargate backed by Aurora PostgreSQL within my scope
- Lambda-based handlers for event-driven and asynchronous edges within my scope
- Integration tests running against real AWS resources from CI for the services I worked on
Components I integrated
- The hybrid API gateway layer that spans on-prem and multi-region AWS, from the service side
Components I investigated
- Aurora failover and Lambda cold-start behaviour on critical paths within my scope
Components I validated
- Service behaviour end-to-end via integration tests gated in CI for the services I worked on