MONRO INC.

Using AWS Lambda to Optimize Website Speed, Scale, Delivery, and Performance

Headquartered in Rochester, NY, Monro, Inc. is a leading independently owned and operated auto service and tire provider in the United States.  They operate more than 1240 stores, have 98 franchised locations, 8 wholesale locations and 3 retread facilities in 30 states, serving the Mid-Atlantic and New England regions, portions of the Great Lakes, Midwest, Southeast, Louisiana and California.

Their website is one of the major channels their company uses to drive customer traffic to their brick and mortar locations. EagleDream provided Monro with a single code base that hosts all their brands reducing maintenance and costs for the web presence. Using their website, customers can find nearby locations, request service appointments, search for tires, and learn more about their vast array of auto and tire products.

Monro needed a solution that would deliver 24/7 website availability providing the proper base for future growth as they continue to expand. In addition, the solution needed to be able to handle significant amounts of traffic and scale efficiently. Speed and scalability were of utmost importance. EagleDream supported Monro in building the following:

  • Developed a scalable web presence
  • Implemented AWS Lambda and Amazon RDS to support the website and its expected growth
  • Built a total of 37 AWS Lambda functions using .Net Core, Entity Framework Core, and AWS SDK
  • Architected a data secure strategy compliant with best practices that restricts data accessibility through a single point of distribution

The Solution

To provide Monro with the best solution for their growing business, EagleDream chose to utilize AWS Lambda functions paired with API Gateway security due to its scalability and ease of development. The website required large amounts of data processing so EagleDream decided to utilize Amazon RDS as the data backbone for the solution.

Taking into consideration the growth plan for Monro, EagleDream utilized best practices when creating the .NET solution that would house the code for the AWS Lambda functions that were to be created to support the site.

A single .NET Core solution with a total of 38 projects was created. EagleDream separated data connections concerns from functions as well as kept each of the AWS Lambda functions in its own project. This allowed for minimal disruption when new functions or bug fixes were required. EagleDream was capable of releasing a single function at a time. With this, design releases would not take down the entire API layer and it allowed EagleDream to perform targeted testing.

Learn more about Monro Inc.

Monro Inc. is on its way to achieving a full digital transformation. Learn more about their .NET and data warehouse solutions in the following case studies.

Security and Access Control

EagleDream chose to use API Gateway as the only accessor to the AWS Lambda functions. A layer of security was added to the API Gateway to prevent unauthorized access. API Gateway also provided DDoS protection thus allowing EagleDream to focus its efforts on speed and reliability of the entire system.

EagleDream created a development and production stage in API Gateway. Each stage provided the correct information to the Development and Production websites. AWS Lambda function names were not hard coded in the configuration of the API, and Stage Variables were used for this purpose. By utilizing Stage Variables developers did not have to worry about stages pointing to incorrect functions. EagleDream ensured that production or development data were only available to the proper stage.

To support the separation of data between stages, the created AWS Lambda functions took advantage of the AWS Parameter store for connection string information. Since the API Gateway provided AWS Lambda with Stage information, the code in AWS Lambda utilized this to request the proper connection string from the Parameter Store and therefore pointing to the correct database. By having these connection string encrypted and secured in the Parameter Store, the team prevented unauthorized access of obtaining database credentials, either by stealing compiled code or downloading code repositories. Only an authorized IAM role can retrieve and decrypt Parameter Store values.

The Data Access Layer

The created AWS Lambda functions do not have duplicate code. EagleDream separated code that would be shared among functions into separate projects that would be added as dependencies to AWS Lambda only when needed. The most important layer was the Data Access Layer. This project contained the Database Access Context as well as each of the Entities that mimicked the database tables. Also, processing and filtering of certain data was done in this project allowing for EagleDream to centralize code and in case of bugs have only a single location where code needed to be updated.

Optimized Performance

During integration and user integration testing, EagleDream’s team noticed that web pages that were accessed infrequently would see a degradation of speed. After research they found that AWS Lambdas do suffer from “cold starts”. This happens when functions do not have provisioned resources at the time of execution and AWS needs to provision said resources in order to serve content.

These times varied but were noticed by Monro’s team and EagleDream was tasked with finding a solution that would maintain the same level of performance throughout the entire site.  To circumvent the problem, EagleDream implemented Amazon CloudWatch Events that called the AWS Lambda functions on a set schedule to ensure that resources were always provisioned and performance was maintained.

This execution presented a new challenge for the development team. The intent to call these functions was to maintain them as active, but as a byproduct they increased database calls when they were not needed. Even though these calls were infrequent in nature, every database call, especially for large data pulls was undesirable.

EagleDream added a path in the functions code that would identify when these were called as “warm up” events and bypassed these call events, thus keeping resources available for real world calls. Speed was critical for Monro’s business. Not serving their guests the information they were looking for in a timely manner could result in unhappy customers, a decrease in appointments, site abandonment or loss of sales.

AWS Services Used

  • AWS Lambda
  • Amazon RDS
  • Amazon API Gateway
  • AWS Parameter Store
  • Amazon CloudWatch Events
  • Amazon WorkSpaces

What are you going to build in 2019?

Are you ready to build something visionary in 2019? Schedule a time to speak with one of our Cloud Architects or Software Engineers to layout a plan to build or improve your next project. Our in-depth experience building enterprise-level products and applications in the cloud can help your team succeed in 2019.