Deployable reference systems and product work showing how I approach boundaries, failure modes, infrastructure, and operational trade-offs. Each entry is backed by a public repository containing the full source, so the architecture below can be read directly from the code.
Streaming LLM responses from Lambda
Client → Lambda Function URL → Web Adapter → Flask → OpenAI-compatible LLM API
A single Lambda function streams chat-completion responses back to the client token-by-token as Server-Sent Events, using a Lambda Function URL in response-streaming mode and the AWS Lambda Web Adapter to bridge a Flask app onto the stock managed Python runtime.
- Achieves true response streaming without a custom runtime or container by stacking the Web Adapter with a
RESPONSE_STREAM Function URL - Forwards only each completion delta as an SSE data frame, ends with the
[DONE] sentinel, and pushes errors onto a named event channel rather than the data stream - Ships a dependency-free browser tester built on the Fetch ReadableStream API with an
AbortController stop button — the endpoint is POST, so EventSource is not an option - Documents secret handling through
.env and useDotenv, and explicitly warns that the demo endpoint is unauthenticated, so anyone with the URL can invoke it and consume the upstream key
Stack: Python 3.12, Flask, Lambda Function URLs, Lambda Web Adapter, SSE, AWS Lambda Powertools, OpenAI SDK, Serverless Framework
View Lambda streaming repository
AppSync GraphQL authorization patterns
Client → AppSync GraphQL → Lambda resolvers → DynamoDB
Provisioned two managed AppSync GraphQL APIs in one stack, each backed by direct Lambda resolvers performing DynamoDB CRUD, to contrast distinct authentication and authorization strategies.
- The Todos API exposes full CRUD behind API-key authentication, with IAM as a secondary provider
- The Orders API uses Cognito User Pools as the primary provider and an API key for reads, while
createOrder is gated to authenticated Cognito users through @aws_cognito_user_pools directives plus an in-code identity guard - Stamps the caller's Cognito
sub as the order's customerId, so record ownership cannot be spoofed by the client - Enables AppSync request logging at the
ALL level on both APIs alongside structured Lambda logs
Stack: AppSync, Cognito, Lambda, DynamoDB, IAM, Python 3.12, GraphQL, AWS Lambda Powertools, Pydantic, Serverless Framework
View AppSync GraphQL repository
EventBridge routing and decoupled consumers
Client → API Gateway HTTP API → Lambda → EventBridge bus → consumer Lambdas
Built an HTTP-to-EventBridge system where one producer publishes domain events to a custom bus and multiple consumers subscribe through content-based rules.
- Demonstrates fan-out and content-based routing — an
orders event fans out to two consumers, while a notifications event matches a two-field source + detail-type rule - Shows the same rule authored two ways: as Serverless
eventBridge triggers and as raw CloudFormation rules with SourceArn-scoped invoke permissions - Publishes through a Pydantic envelope that supports both a flat default and a caller-controlled
source / detail-type / detail payload - Keeps IAM tight — the producer can
PutEvents only to the one custom bus — and documents at-least-once delivery plus the idempotency, retry, dead-letter, and alarm work needed before production use
Stack: EventBridge, API Gateway HTTP API, Lambda, IAM, Python 3.12, AWS Lambda Powertools, Pydantic, Serverless Framework
View EventBridge repository
Multi-AZ VPC and private DNS
Internet → IGW → public subnets · NAT → private subnets · Route 53 private DNS
Provisioned a two-Availability-Zone VPC with public and private subnets, a cost-optimized single NAT gateway, a bastion host, two private EC2 hosts, and a Route 53 private hosted zone so every host resolves by name from inside the network.
- Keeps the stack region-portable — Availability Zones via
GetAZs and Amazon Linux 2023 AMIs via the AWS SSM public parameter, with no hardcoded IDs - Layers access so private hosts accept SSH only from the bastion's security group by reference rather than CIDR, and generates the EC2 key pair as an AWS resource that stores encrypted private material in SSM Parameter Store
- Defaults to encrypted
gp3 EBS on every host and splits the stack into one CloudFormation concern per file for readability - Exposes plain stack outputs (VPC, bastion IP, key material path, private DNS names) and flags the open bastion SSH rule as demo-only to lock down before real use
Stack: VPC, EC2, Route 53, NAT Gateway, SSM Parameter Store, CloudFormation (via Serverless Framework)
View networking stack repository