
Rift Rewind Developer Challenge 2 - How I Built My Own League of Legends Analytics Agent with AWS
A serverless League of Legends analytics chatbot powered by AWS Lambda, Bedrock, and Strands Agents built from scratch to deliver real-time insights through a web-based chat interface.
Developer Challenge Winners 🏆
Before this challenge, I’d used AWS in bits and pieces - launching EC2 instances, storing files in S3, but never in a way that tied everything together. The Rift Rewind Developer Challenge 2 gave me a reason to do that. Building a Lambda function to fetch live match data, securing credentials with Parameter Store, and pushing everything to S3 felt like a real project, not just a tutorial. It was a solid introduction to how these services actually work together in practice.
Day 1 - Data Pipelines That Actually Work

In day 1, I had to retrieve the API key from Riot games developer site and replace old key that was expired from the previous Rift Rewind Challenge 1, only different thing here was creating a new SSM parameter store secret to enable a secure method of calling API credentials.
I set up a serverless function using AWS Lambda to fetch match data from the Riot Games API, handling rate limits along the way. The data was stored in an S3 bucket with a clear structure separating raw and processed files. I extracted key stats like champion picks, item builds, and performance metrics, laying the groundwork for meaningful analysis later.
💡 Today I learned:
boto3 SDK for python used for interacting with AWS services in a python file:
Tip for developers is getting familiar with how your python code can interact with AWS and can create business critical logic that Lambda can then automate. Below is parts of
1
2
3
4
5
#Instantiating ssm service
ssm = boto3.client('ssm')
#Instantiating s3 service
s3 = boto3.client('s3')❌ Had encountered an timeout error when testing Lambda Function
✅ Solution was to set timeout for 30secs (Lambda > Configuration Tab > Edit > set timeout = 30sec > Save)
✅ Solution was to set timeout for 30secs (Lambda > Configuration Tab > Edit > set timeout = 30sec > Save)

Solution to bug in Lambda Configuration
Day 2 - Transforming Match Data with SageMaker

Day 2 of the Rift Rewind Challenge pushed me deeper into real-world data engineering by introducing SageMaker Data Wrangler to clean and prepare match data from Riot’s API. After successfully building a data pipeline yesterday with Lambda and S3, I now had structured JSON files in the cloud but transforming that raw data into something meaningful was the new challenge. Today I learned how to import, preview, and inspect structured player stats using SageMaker’s visual interface, without needing to write a line of code. It felt like stepping into the kind of tool real data teams use for scalable preprocessing and seeing my own game stats load in SageMaker was a satisfying moment.
Of course, nothing ever works on the first try. I ran into two issues that would’ve stopped me before this challenge. First, I got an API authentication error turns out my Riot key had expired, so I regenerated a new one and updated it securely in SSM Parameter Store. Later, when trying to load match data into SageMaker, I hit a confusing NoSuchKey error. After digging into the S3 path structure, I realized I needed to copy the S3 URI only up to the /stats/ folder not the specific JSON file to preview and batch process it. That small fix made the data load output instantly. Day 2 taught me how to move beyond just storing data, I’m now actively preparing it for AI, which is where this project starts to feel truly next level.

Data preview output of S3 URI bucket
Day 3 - From PDFs to Insights with Amazon Bedrock

Day 3 focused on setting up a knowledge base using Amazon Bedrock. I uploaded a League of Legends VFX guide to S3, used Titan Text Embeddings to convert the document into vectors, and set up Claude 3 Haiku to answer questions based on that content. Once synced, the system could respond to queries like “What are the visual effects in LoL?” with detailed answers pulled directly from the document.

Sample prompt to knowledge base system
For anyone trying this for the first time, just follow the guided steps in the Bedrock console and make sure your S3 bucket is selected correctly. Picking the default parser and chunking settings is usually fine. If syncing fails, try rechecking your permissions and bucket path. Overall, it’s a straightforward way to build a searchable, AI-powered document system.
Day 4 - Using Amazon BedRock to level up match data

Today’s challenge was all about turning stored match data into real insights using Amazon Bedrock Knowledge Bases. I learned how to query my structured League of Legends data both through the AWS Console and programmatically with Lambda, uncovering stats like KDA ratios, item performance, and champion trends all using natural language questions. The test interface was a great way to experiment with query phrasing and explore how retrieval and generation models (like Claude) return data-backed answers.

Testing BedRock Knowledge Base function query
The second part involved deploying a Lambda function that could automatically query my knowledge base. This added flexibility and paved the way for automated match analysis workflows. I hit a few snags along the way like validation errors with my Knowledge Base ID and refining how I phrased my queries but now I understand how to structure effective queries, optimize retrieval settings, and troubleshoot Bedrock responses with confidence.
Day 5 - Building a Smarter League Agent with Strands SDK

Day 5 focused on building a functional League of Legends analytics agent using the Strands framework. This day had some friction to overcome as the strands package was not playing fair with setup.
✅ Here is what is needed for your requirements.txt file to work:
1
2
3
4
5
strands-agents
strands-agents-tools
bedrock-agentcore[strands-agents]
boto3
python-dotenvDay 6 - Deploying a Production-Ready AI Agent with Lambda, WebSockets, and Streamlit

No lie, this day was the hardest to implement; requires patience and resilience to understand how Lambda Functions and layers work. Since I am on an M chipset mac, it requires a different setup when setting up the layer in order to be attach and work the LLM. Very challenging but the forces did prevail.
I have ran into several issues but one was the strands agent to work within my lambda. The folder path in which you configure the layers depends on which Operating System you have. The solution was to run this within a container or on EC2 and then zip. After that, the logs demonstrated the function worked successfully!
This day was indeed a strenuous effort and reminder to research solutions outside of the article, the following link has the solution and reasons to how it should work and operate.

Chatbot testing 🦾
💡CRITICAL TO NOTE - make sure you begin your project within the US-WEST-2 region in order to work with the strands agent code.

chat-agent-handler CloudWatch logs
Day 7 - Full Circle - Merging My League Web App with a Live AI Agent

The journey was long and challenging but in retrospect had one to use critical thinking and curiosity to reach the goal. I have combined the LLM chat box into my previous Rift Rewind 1st challenge website and have remembered to also renew the API keys within SSM parameter store for both rift functions AND as well as the variable to input within your javascript file.

Deploying on Amplify

Final Product 🏁
Keynote 🗝️ Getting an AI chatbot into production takes patience, good debugging, and a solid grasp of how AWS services talk to each other. Lots of curveballs in this project but thankfully it is up and active!
✨ Final note: Throughout the challenge, I kept track of helpful tips and solutions, not just to solve my own blockers, but to help others hit their goals too. If you’re on this journey, just know you’re not alone. Keep going, it will click.
Thanks to moderators & builder community - @benfowler , @autrin , @saburka , @pranalick , @athala , @dylanm , @cecilcj , @awsashwin , and Rift Rewind Hackaton sponsor DEVPOST .
-MR
✌🏼
✌🏼
Enjoyed reading this content? Let the author know!
Your likes, comments, shares, and saves help creators reach more builders.
Loading recommendations
Loading article