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.

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