I am excited to share my first submission of #CloudGuruChallenge. ACloudGuru releases monthly challenge projects. Januray'21 challenge was about developing an application in a multi-cloud environment. The aim of the challenge was to develop an image upload and recognition process using no less than three different cloud providers. To my immediate response, I know these clouds have to include AWS, Azure and GCP, as I have only worked on these three so far.
This was the point where I have to explore the different services offered by Cloud Providers and select the appropriate one.
Architecture Diagram:
The web application stores image in an S3 bucket. The bucket triggers a lambda function which calls Azure Vision API with public image URL as a parameter. The JSON metadata received by Lambda is then stored in Firestore from where it is retrieved by the web application.
Image Recognition Service: I decided to use Azure Cognitive AI’s Computer Vision service for generating metadata of uploaded images. The Computer Vision service provided a good free plan of 5,000 transactions free per month at 20 transactions per minute. After free tier, Azure provided OCR, Adult Objects, Brand, etc. for $1 per thousand requests. In contrast to this, GCP provided free 1,000 units per month after which a simple Label detection would cost $1.50 per thousand requests.
Storage Service: AWS has a vast variety of services with integrations which are very well documented. I used AWS S3 service to store images. Using S3 I also had the option to trigger a Lambda function which can handle my image metadata creation and storage. Also, I would be able to use CloudFront to distribute my images across regions.
Database: Lastly, I used GCP Firestore to store image data. Cloud Firestore is a NoSQL document database that lets you easily store, sync, and query data for your mobile and web apps - at a global scale. I can expand my application to make an ‘AI Image Gallery’ application across web and mobile.
Web Application: I made a React-Express javascript application. The Express server has 2 endpoints. One for saving an image into S3 and other for fetching metadata of the saved image from Firestore. React frontend has the feature of capturing an image, handling multiple camera devices and viewing metadata as JSON.
Github Repository - https://github.com/dwivediabhimanyu/multicloud-challenge
Demo Application - https://morning-peak-66866.herokuapp.com/
My LinkedIn - https://www.linkedin.com/in/abhimanyudwivedi/
This architecture is a very basic solution. But, I am happy that I completed this challenge with my best efforts. I had a great time debugging errors and reading documents to actually make this application work. I am looking forward to participating in all upcoming monthly challenges.