A web application that uses AWS EC2, SQS and S3 to provide image recognition as a service to users.
Table of Contents
This is the project for the course CSE 546 - Cloud Computing. It consists of a three-tier architecture (web-tier, app-tier and the data-tier) which uses AWS resources to elastically scale in and out proportionally with respect to the load.
High level overview:
- The web-tier consists of a flask server that allows users to upload images. The server pushes the images along with a unique identifier to SQS input queue and reads the output SQS queue to return the classification of the image to the user.
- The app-tier consists of a back-end service that reads the input queue, puts the image into the input S3 bucket, classifies the image, puts the result into the output S3 bucket as well as the output SQS queue.
- The data-tier consists of the input and output S3 buckets which contain the input images and the classifications.
The web-tier also comprises an auto-scaling controller service that utilizes the length of input SQS queue to scale out automatically whereas the logic to scale in is handled in the app-tier.
This section should list any major frameworks/libraries used to bootstrap your project. Leave any add-ons/plugins for the acknowledgements section. Here are a few examples.
This section contains instructions on setting up the project locally. To get a local copy up and running follow these simple steps.
There are two folders, web-tier and app-tier each containing their separate dependencies and code. To install the required dependencies, run
pip3 install -r requirements.txt
For running the main flask server:
cd web-tier/
flask run --host <host> --port <port>
For running the controller script to perform auto-scaling:
cd web-tier/auto-scaler/
python3 controller.py
For running the app-tier code, first install the dependancies using pip. Then run the main.py file using
python3 main.py
Distributed under the MIT License. See LICENSE.md
for more information.