The project we are working on for our Capstone class is an animal adoption app that allows users to match with animals that they are interested in potentially adopting. As part of the initial stages of this project, I took on the task of designing the architecture of our application.
We have decided to use a serverless implementation of our application, which will be a website, through Amazon Web Services (AWS). During a previous internship at Amazon, I became familiar with how AWS works and the various services it offers. Because of this, I was confident in my ability to research and draft a viable system for our needs.
A big limitation I ran into was how we would handle the pricing of the services. AWS offers a free tier, but with implementation and testing I was worried about going over the limits. One of the first roadblocks with this in mind was how we would host the website. Initially, I wanted to host the website using Github pages, but due to the dynamic nature of our website using React, pages was not a viable solution.
My next idea was to use AWS’ Elastic Container Service (ECS). ECS is great for scaling quickly and uses docker images to host things. However, after doing more research I realized this option would be highly costly since it would always be running in a container. Additionally, for demonstrative purposes, we did not need to scale our application for a large amount of users.
I finally settled on using AWS’ Simple Storage Solution (S3) to host the website. Since we are using React, setting up S3 to host a website through the Cloud Development Kit (CDK) was relatively simple. We simply upload/sync our build folder files to the S3 bucket. S3 will create a URL for our site that we can access. However, this URL was not secure since it was an HTTP address.
In order to make sure our site was secure, I implemented a Content Delivery Network (CDN) through AWS Cloudfront. This allowed for a more security for our site and has the added benefit of delivering our content faster since it bases it on the closest region to the user. With this, our website can begin to be properly hosted and we can conveniently interact with other AWS services.
In the next post I will detail how we setup our user login and management system, and how it interacts with the rest of the services we plan to use.