Move from theory to practice. These five meticulously crafted Logesh Cloud Universe certified projects will take you from Kiro beginner to an elite Agentic Architect.
Goal: Automatically resize, watermark, and generate AI metadata tags for images as soon as they are uploaded to an S3 bucket.
## Requirements Users upload images to S3. Images must be resized to 800x800 and tagged with AI labels. Processed data stored in DynamoDB for fast retrieval. ## Design S3 PutObject → EventBridge → Lambda → DynamoDB Lambda calls Amazon Rekognition & sharp library. ## Tasks ☑ Create S3 buckets (Raw & Processed) ☑ Configure EventBridge rule ☐ Write Lambda handler (Node.js) ☐ Define DynamoDB ImageMetadata schema
AWS Services Used: Amazon S3, EventBridge, AWS Lambda, Amazon Rekognition, DynamoDB.
In Kiro, create a `spec.kiro.md` file. Define the Event (S3 PutObject on the `raw-images` bucket). Define the Action (Trigger Lambda, call Rekognition for labels, resize using Sharp). Define the State (Save the image metadata and labels into DynamoDB).
Instead of manually writing CloudFormation or navigating the AWS console, instruct the Orchestrator to "Generate IaC". Kiro will autonomously write the least-privilege IAM roles allowing Lambda to read S3 and write to DynamoDB.
Run Kiro's `kiro test --sandbox` command. Kiro will spin up a mock S3 bucket, upload a test image, and verify the DynamoDB table populates correctly. Watch Kiro self-heal if the Node.js `sharp` library fails to compile natively!
Refer to the "AWS Serverless Application Repository" and Logesh Cloud Universe's "Event-Driven Architecture Patterns" guide to compare Kiro's auto-generated IaC against AWS's official gold standards.
If Kiro saves the resized image back into the same S3 bucket, it will trigger the Lambda function again, causing an infinite billing loop! In your EARS spec, explicitly state: "Response: Save resized image to a SEPARATE `processed-images` bucket."
Goal: Build an ultra-low latency, real-time leaderboard for a mobile game capable of supporting 10,000 concurrent players.
## Requirements Mobile app sends live score updates. System calculates Top 100 players globally under 50ms. Leaderboard broadcasted to all connected players. ## Design API Gateway (WS) → Lambda → ElastiCache (Redis ZSET) DynamoDB stores persistent active connections. ## Tasks ☑ Deploy API Gateway WebSocket routes ☑ Provision ElastiCache Redis cluster ☐ Write Connection Manager Lambda (Python) ☐ Write Redis ZADD / ZREVRANGE logic
AWS Services Used: API Gateway (WebSockets), Amazon DynamoDB, Amazon ElastiCache (Redis), AWS Lambda.
WebSocket connection management in AWS is notoriously difficult. Tell Kiro: "Generate a connection manager that stores `$connect` and `$disconnect` IDs in DynamoDB."
Command the Kiro Sub-Agent Swarm to optimize for speed. Specify: "State: Store the top 100 players in ElastiCache Redis using a Sorted Set (ZSET). Fall back to DynamoDB for historical records." Kiro will autonomously generate the Redis caching layer and the sync logic.
Use Kiro's Deep Hook architecture to inject an Artillery.io load-testing script. Ask Kiro to run the load test in the sandbox. If latency spikes above 50ms, Kiro will automatically self-heal by increasing the Lambda memory allocation and re-testing.
Cross-reference Kiro's Redis logic with the "AWS Whitepaper: Best Practices for Amazon ElastiCache". You will notice Kiro inherently applies best practices like connection pooling.
LLMs sometimes struggle with cache invalidation logic. Be hyper-explicit in your EARS spec: "Action: When a player's score updates, ONLY invalidate the cache if their new score is higher than the lowest score currently in the Redis Top 100."
Goal: Build an internal company chatbot where employees can ask questions and get answers sourced strictly from confidential company PDF manuals.
## Requirements Internal chatbot answers employee queries. Answers must be strictly sourced from company PDF manuals. Abort if semantic similarity score is below 0.80. ## Design API Gateway → Lambda → Amazon Bedrock Lambda queries OpenSearch Serverless for vectors. ## Tasks ☑ Setup OpenSearch Serverless collection ☑ Configure Bedrock Titan Embeddings ☐ Write RAG Retrieval logic (Python) ☐ Inject Strict Security Hook for hallucination prevention
AWS Services Used: Amazon Bedrock, OpenSearch Serverless (Vector Store), Amazon Textract, AWS Lambda, S3.
Instead of manually parsing PDFs, use the Model Context Protocol (MCP) Router. Mount your S3 bucket of PDFs directly to Kiro. Tell Kiro: "Read the attached MCP volume containing PDFs and generate an ingestion pipeline using Textract."
Instruct Kiro to provision an OpenSearch Serverless collection. Tell it to chunk the Textract output and use Amazon Titan Embeddings (via Bedrock) to vectorize the text.
Write a Kiro Hook that enforces strict semantic search thresholds. "If the OpenSearch similarity score is below 0.80, Kiro must instruct the chatbot to reply 'I don't know' rather than hallucinating."
Study the "AWS AI/ML Blog on Retrieval-Augmented Generation". Kiro automates this entire reference architecture, but understanding the chunking math will help you refine your EARS specs.
You are using an AI (Kiro) to build an AI (Bedrock Chatbot). Make sure you clearly label which prompts are meant for Kiro to build the infrastructure, and which system prompts are meant to be injected into the actual Lambda function for the Bedrock chatbot. Use XML tags like <chatbot_system_prompt> in your spec to avoid confusing Kiro.
Goal: Create a self-healing AWS environment where server CPU spikes or database throttling automatically trigger remediating actions without waking up a human.
## Requirements Automatically restart EC2 instances if CPU > 90%. Notify the DevOps team in Slack upon success or failure. Ensure strict least-privilege IAM roles. ## Design CloudWatch Alarm → SNS → Step Functions Step Functions execute SSM Runbook (AWS-RestartEC2Instance). ## Tasks ☑ Define CloudWatch CPU metric alarms ☑ Generate ASL JSON for Step Functions ☐ Configure SNS topic + Slack webhook ☐ Validate IAM roles with Kiro Hook
AWS Services Used: Amazon CloudWatch Alarms, AWS Step Functions, AWS Systems Manager (SSM), Amazon SNS.
Map out the failures. In your EARS spec, define the events: "Event A: EC2 CPU > 90% for 5 mins. Event B: DynamoDB ThrottledRequests > 50."
Writing Amazon States Language (ASL) JSON by hand is a nightmare. Tell Kiro: "Action: Generate an AWS Step Function that takes Event A, triggers an SSM runbook to clear the cache, and emails the dev team. For Event B, double the DB write capacity." Kiro writes the perfect 300-line ASL JSON file.
This is where Kiro shines. Implement a Security Hook that fails if Kiro assigns a `*` (wildcard) IAM permission. Kiro will be forced to self-heal and iteratively refine the IAM roles down to the exact ARNs required for the Step Function to execute.
Read the "AWS Well-Architected Framework: Reliability Pillar". This project perfectly encapsulates the core tenet of "Anticipating and responding to failures automatically."
Kiro's Execution Sandbox cannot physically spike a real EC2 instance to 90% CPU just to test your code. You must ask Kiro to generate a Mock Injector—a dummy Lambda function that artificially publishes a fake CloudWatch Alarm payload to test the Step Function logic.
Goal: Take a massive, outdated, single-server application and safely migrate it to an ECS Fargate microservices architecture with zero downtime.
## Requirements Migrate `/api/v2/users` endpoints from monolith to microservice. Zero downtime for legacy active users. Databases must remain perfectly synced during transition. ## Design ALB Routing Rules → ECS Fargate (New) | EC2 (Legacy) AWS DMS handles Change Data Capture (CDC) replication. ## Tasks ☑ Reverse-engineer PHP monolith into Kiro spec ☑ Provision ECS Fargate cluster ☐ Update ALB Listener routing paths ☐ Setup AWS DMS replication task
AWS Services Used: Application Load Balancer (ALB), Amazon ECS (Fargate), Amazon RDS, AWS Migration Hub.
Do not write a spec yet. Instead, use Kiro's Legacy Modernization Engine. Point Kiro to the GitHub repo of an old monolithic application (e.g., an old Express.js or Python Flask app). Command Kiro to "Audit and map the existing architecture and output an EARS spec."
Modify Kiro's generated spec. Implement the Strangler Fig pattern: "Action: Configure the ALB so that all routes matching `/api/v2/users/*` go to the new ECS Fargate cluster, while all other traffic defaults to the legacy EC2 instance."
Instruct Kiro to write a CDC (Change Data Capture) pipeline using AWS Database Migration Service (DMS) so the old EC2 monolith and the new Fargate microservice stay perfectly synced during the transition phase.
Martin Fowler's canonical article on the "Strangler Fig Pattern", combined with the "AWS Prescriptive Guidance on Microservices Migration".
This is an Expert level project. Never allow Kiro to unilaterally push routing rules to a production ALB without human sign-off. Use a Pre-Deploy Hook to mandate a manual GitHub PR review before Kiro applies the Terraform changes.