vivekworkamazon web services
← work

May 2025 to Aug 2025 · Toronto, ON

Solutions Architect Intern

Amazon Web Services

Tech
AWS (Lambda, API Gateway, Cognito, S3, EC2, Amplify, CloudFront, CodePipeline), Amazon Bedrock, TypeScript, React, Java, Spring Boot, Flask, Atlas Core Agents
Date
May 2025 to Aug 2025
Status
Complete
Links
aws.amazon.com

AWS's Cloud Sales Center in Toronto pairs Solutions Architects with the sales org to help enterprise customers scope, design, and close deals. I joined as a Solutions Architect Intern and spent the summer building Lumina, an AI-native data analytics platform, with two smaller efforts running alongside it: an outbound messaging tool for the sales floor and a hackathon-winning documentation generator.

Lumina — AI-Native Analytics Platform

The Problem

Solutions Architects and their customers routinely sit on raw datasets, usage logs, cost exports, telemetry dumps, 10GB or more, with a real question behind them and no fast way to reach an answer. Getting from a raw file to a first chart and a written insight meant loading the data, writing analysis code by hand, and iterating on visualizations: a four-hour round trip on a good day, with no self-serve path for a non-technical stakeholder to ask a question of their own data.

Architecture

I designed Lumina as a full-stack platform: React and TypeScript on the front end, a Java and Spring Boot API layer, and a backend built around Amazon Bedrock agents. Cognito handled authentication and role-based access with JWT tokens, so datasets stayed scoped to the tenant that uploaded them. S3 held everything across dedicated buckets for raw data, generated scripts, reports, and visualizations, and API Gateway routed requests into Spring Boot and into two purpose-built Lambda functions behind it. EC2 auto scaling behind an Application Load Balancer, fronted by CloudFront, kept the platform responsive under uneven traffic, holding 99.9% availability at sub-two-second response times.

Technical Implementation

One Lambda function handled visualization rendering: it packaged matplotlib, pandas, and seaborn into a Lambda layer, took a Bedrock agent's interpretation of a natural-language prompt, and executed the generated Python against the uploaded dataset (CSV, Excel, JSON, or Parquet), writing the resulting chart back to S3 behind a presigned URL. A second Lambda function ran a Bedrock agent with code-interpreter access to S3, reading a customer's file directly and generating equivalent Python and R analysis scripts on demand, complete with commentary, instead of a canned template. On the front end, a Monaco-based editor let a user read and adjust the generated code before rerunning it, with a Recharts-backed visualization layer rendering the output.

End to end, this took a four-hour manual analysis down to under two minutes on datasets of 10GB or more, and cut manual coding time on custom analysis requests by roughly 80%.

Discovery and Rollout

Before writing code I ran discovery sessions with the Solutions Architects who'd actually use the tool, to pin down what a first version needed to cover, and later led an architecture walkthrough for the wider team covering the Bedrock agent design, data flow, and security model as Lumina moved toward broader use inside the org.

Technical Challenges

Bedrock's generated code couldn't be trusted to run unmodified: some scripts referenced local file paths, called plt.show() (a no-op in a headless Lambda), or assumed a naming convention that didn't match the platform's own. I built a code-adaptation layer that rewrote file I/O to point at the already-loaded dataset and stripped unsupported plotting calls before the code touched matplotlib's runtime, mixing Bedrock-assisted rewriting with deterministic pattern matching for the parts that didn't need a model in the loop. Keeping the pipeline flexible enough to answer a real question, without being so open-ended that a bad prompt could crash the container, was the core design tension of the whole build.

Key Learnings

Lumina made it clear that agent-based systems need as much engineering around the model as they do model calls: validating output, sandboxing execution, and giving the agent a narrow enough job that its failures stay contained. I came out of the summer with real experience turning a Bedrock agent from a proof of concept into something reliable enough to sit behind a production-shaped platform.

Outbound Messaging Platform

Account Executives in the Cloud Sales Center were writing personalized outreach by hand for every account, a process that didn't hold up past a handful of customers. I built a messaging platform in React, Flask, and AWS Amplify that generated that outreach automatically from account data. It went into standing use across more than 150 customer accounts and cut manual prep time by roughly 85%.

Internal Hackathon — Promotion Body of Work Generator

Solutions Architect promotion packets pull achievement data, metrics, and project history from three separate internal systems, Salesforce, Quip, and an internal tool called Marshal, and assembling one by hand typically took two to three weeks. Over a company-wide hackathon I built a tool in React and Flask that used AWS Atlas Core Agents to pull from all three systems automatically and generate a structured draft packet, cutting that process to under five minutes. It won first place overall and stayed in use past the hackathon itself.

Other

  • Earned the AWS Certified Cloud Practitioner certification during the internship.
  • Delivered a workshop on Amazon Alexa to the CSC tech team, drawing more than 70 attendees.