If you are into business or technology, then you have definitely heard of Amazon Web Services. In terms of business, AWS business model is very revolutionary when it comes to lowering other businesses overhead for server costs by hosting almost all of the infrastructure on Amazon Data Centers.
For technology, AWS provides lots of different software for scaling your business as a startup vs enterprise.
If you are unfamiliar with AWS, understanding it will be pretty tough, considering their website is jam-packed full of a lot of different types of services… you’ll get lost.
Essentially, AWS provides services for many different types of companies and all of their products reflect that in their awesome: “Pay what you use” pricing model. I won’t go over every single service because then I would be here for hours. I will just go over the most popular services that AWS provides and give an easy explanation of each. That way, you can understand what AWS is and can get you thinking about how AWS can benefit your application or business.
Amazon EC2
What Amazon Says
Amazon Elastic Compute Cloud (See where the 2 comes in?) is a web service that provides secure, resizable compute capacity in the cloud. It is designed to make web-scale cloud computing easier for developers.
Let’s make this easier to understand
Cloud computers or cloud servers are not new. Let’s say that you have a database or software you need hosted on a machine. Back in the day, you would probably host this on an actual machine of some sort. Depending on your business, this setup could be pretty pricey or pretty risky. So software like Amazon EC2 allows you to rent a portion of a larger machine so that you can eliminate the risk of a disaster and lower the cost of hardware.
That’s the basics of it. It also comes with other great features that would eliminate the need for an infrastructure team to manage.
Let’s say I needed a dedicated server to put my WordPress installation on. I would easily be able to do this using AWS using an easy one-click install and then any other changes needed I could just SSH into my machine and have full access. All for the price of shared hosting like GoDaddy. Awesome.
Amazon S3
What Amazon Says
Amazon Simple Storage Service (Amazon S3) is an object storage service that offers industry-leading scalability, data availability, security, and performance.
Let’s make this easier to understand
Amazon S3 provides a very fast and reliable way to store things. These “things” can be videos, images, documents, whatever you want. You create something called a “bucket” and you store the items in the bucket that you want to save.
This one is a little bit more straight forward. Let’s say I created an application that let you upload dog pictures and posted them randomly to other users throughout the site. When you first start your application, it’s probably just ok to have them hosted alongside your application. The problem with these “objects” (in this case images), they are very large in size. Even something like 10 images could be larger than your codebase itself. What happens on National Dog day when everyone wants to share pictures of their puppy? Your Amazon EC2 instance runs out of memory.
Your ideal solution is to upload the image directly to an S3 bucket and save the path of it in your database. That way, you can store a lot of objects without cramming up space for your database or server.
A really good example of Amazon S3 is on one of my favorite sites dev.to (which you are currently on), you can upload an image and immediately get back a URL with the image that was uploaded. Perhaps one of the most straight forward examples of how S3 works.
Amazon Aurora
What Amazon Says
Amazon Aurora is a MySQL and PostgreSQL-compatible relational database built for the cloud, that combines the performance and availability of traditional enterprise databases with the simplicity and cost-effectiveness of open source databases.
Let’s make this easier to understand
Amazon Aurora is a managed relational database alternative to MySQL and PostgreSQL. If you’re familiar with how relational databases work. Then you can skip over this part, but for anyone unaware, relational databases is how you store data using the Relational Model. In a nutshell, the database is organized into tables with rows and columns kind of like a spreadsheet. These tables can have relationships with other tables.
Here’s a good way of explaining it:
Let’s say I wanted to store the data of my customers and their pets at my Pet Store. Well, this example is pretty straight forward. I can just add the persons name, address, email and their pet. Of course, I want to be able to add in more information like their name, animal, breed etc.
We would create a “Customer” Table that we can take all information relating to that customer.
Then, we create a “Pets” Table that has a “Foreign Key” column that we can relate this data back to (in this case the customer). This way, if I wanted to find all pets that belong to “Sally Smith” I can get that or if I wanted to count the amount of cats that “Sammy Salads” has… well, I think it’s best if we don’t find that out.
There are lots of open source methods available for relational databases but just like your room, managing a database can get extremely messy. Aurora takes all of the pains of hosting, managing and securing a database off your hands.
Amazon DynamoDB
What Amazon Says
Amazon DynamoDB is a key-value and document database that delivers single-digit millisecond performance at any scale.
Let’s make this easier to understand
DynamoDB is a no-sql database that scales with the amount of data coming in. What makes a no-sql database different from a SQL database is that it doesn’t use SQL and doesn’t have relational features. The benefits for this is how lightweight the database can be in result of not having these features.
Continuing with our dog database thing or whatever, I implemented a like button. Now, I want to create a database of likes so that my users can see what posts they liked at that time. We could do this to a relational database but because our users will probably be liking 100x more than they will be creating, I think it’s best we use DynamoDB to quickly insert this data into a database so we don’t overpower our traditional database when users are trying to create things.
Since it’s also a “Key”: “Pair” system, this makes it easy if you are doing “serverless” applications that allow you to receive data in a similar JSON format. DynamoDB makes it easy to just store data in seconds. You also get 25GB free. That’s a lot of storage.
Amazon Lambda
What Amazon Says
*AWS Lambda lets you run code without provisioning or managing servers. *
Let’s make this easier to understand
AWS Lambda lets you run code without provisioning or managing servers… (oh wait that’s what Amazon said).
Ok, so if you are developing for the web, you will run into running things client and server side. Client will deal with most things UI/UX etc and the server would manage any big or private operation needing to be run. In the age of “microservices”, what happens if you wanted to add on a simple private function without having to deploy an entire server for it? Say:
A donation widget that requires Stripe authentication
An email to be sent
A large calculation or API call that would require a modest amount of computing power.
Lambda allows you to do this easily without having to deploy anything. Just create an instance and insert your Node, Python code etc and you will have the functionality of a server to return the results of your code for you. What makes this great is that it charges you on a usage basis. Only pay what you have to.
This means you can create your applications using your frontend frameworks and not have to worry about setting up your server. Maybe this is the perfect time to give the JAMstack a try ;).
![lewismenelaws](https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F10181%2Fd4fbfbdb-8237-4b08-acef-e23862a2a516.jpg)
What was your last dev related Google Search?
Lewis Menelaws ・ Jan 3 '19
Amazon Lightsail
What Amazon Says
Lightsail is an easy-to-use cloud platform that offers you everything needed to build an application or website, plus a cost-effective, monthly plan. Whether you’re new to the cloud or looking to get on the cloud quickly with AWS infrastructure you trust, we’ve got you covered.
Let’s make this easier to understand
This one is more straightforward than the other ones. Essentially, it takes all different types of application you would need (Database, server, etc) and puts it in an easy to use a container for you to use.
Amazon SageMaker
What Amazon Says
Amazon SageMaker provides every developer and data scientist with the ability to build, train, and deploy machine learning models quickly. Amazon SageMaker is a fully-managed service that covers the entire machine learning workflow to label and prepare your data, choose an algorithm, train the model, tune and optimize it for deployment, make predictions, and take action. Your models get to production faster with much less effort and lower cost.
Let’s make this easier to understand
This one requires a lot more context. In today’s age of “Machine Learning”, Amazon’s SageMaker does the whole process of it. Meaning that for people who have a large dataset and wants to find actionable insights based on the data they have. They would use SageMaker to make that process much easier.
First, we need to understand how Machine Learning works:
- You have a dataset (Database, csv file, JSON, etc) and you want to get some insights on it. Let’s say I have a dataset that 1,000,000 images of dogs and cats. I want to be able to build a system that can identify if the image is a cat or dog.
- We first get initial data that we need to label so that we can give the machine an understanding of what we are working with. Let’s say I help label 500 images of what is a dog or cat.
- Using this info, the machine does it’s best to either classify if it’s a dog or a cat. Anything that gets confused is resent to classify which further improves the machine of understanding if it’s a dog or cat.
- The year is now 2088. The dog versus cat machine is now understanding that mankind must be exterminated to preserve its lifecycle.
Now, my example is fairly simple (and quite scary) but when you are an organization like Intuit and have billions of data points being generated at times, it’s good to be able to get results from this information to further better your products or understand your customer base.
For civilized people like myself though, I will aim to achieve this 2088 goal of world domination.
Conclusion
AWS seems tough and overwhelming at first, however, it allows you to choose what kind of software makes sense for your scenario. Trust me, whatever situation you are in is a scenario you could apply on AWS. They reported almost 26 Billion (that’s right... with a B) dollars in 2018. You can get started in the ecosystem whenever using their free-tier. Once you understand what some of the services are, you can then start to understand most of them and how they can apply to what you want to use for your world domination.
Thanks for the read. If you found this post valuable. Feel free to give me a follow here or on Twitter :)
Top comments (31)
I have needed something like this for a long time to clear the confusion. It's beginning to make sense but still with some confusion. Let's say i have a Flask app that users can create accounts and post events. Am i correct to say i would need EC2 for the core app and Amazon S3 for the event and user profile images? Can i also just use Lightsail? And if i have to use 2 or more services how then is this cheaper than just using one service with a fixed monthly payment?
Elastic Beanstalk vs Lightsail
The easiest way to deploy a web-app on AWS such as a Flask app is to use Elastic Beanstalk. Elastic Beanstalk was created to compete with Heroku. You just choose your runtime environment (Python) upload your code and it runs.
Elastic Beanstalk under the hood is a CloudFormation template which will provision multiple AWS services such as Load Balancers, Auto Scaling Groups, EC2 instances, RDS and etc.
Once you get comfortable with the different AWS services you can take the training wheels off so to speak and just provision these resources directly.
Lightsail was created to compete with Godaddy in the way it's easy to set up a wordpress. In my experience, Lighsail is troublesome as I find the GUI becomes out of sync with resources and the only way I've fixed it was to use paid AWS support. So to me, Lighsail is more trouble than its worth.
Lighsail and Elastic Beanstalk are very similar in that the are glorified GUIs to setup AWS resources for you.
The Monolith
You could just launch a single EC2 instance and put everything on it, and this is a good way to be cost effective. AWS does give us free tier access to many services which can lessen the adoption of using multiple services. S3 is a cost I never really think about because it takes terabytes of data before I start seeing cents. Also, there is no cost for traffic coming into AWS meaning uploads don't cost you anything.
So if you want to be cost effective you would provision a single EC2 instance running the Flask app and the database, S3 is not a cost you need to worry about so you can just store files there with little worry.
If you really want to save money you should be looking at serverless architecture. You can take your flask code and turn them into python lambda functions and then use MySQL Aurora Serverless to have this highly available and durable application that costs nothing or pennies.
I have a fundamentals course
I cover many fundamental AWS services and I go deep into how pricing works and how to keep costs down in my fundamentals course.
If anyone is interested here's the deal:
Get 15$ OFF Certified Cloud Practioner for 3 Month Access
Great response Andrew!
Thanks for the detailed response.
Good question Halafu. What's good with AWS is the free tier can provide many of these services for free while your application is small. So you might be able to get away with not paying anything or very little.
You can use lightsail, it kind of will jump your project faster since it seems like you have a standard web application.
From what I understand,
EC2 for your Flask Server
S3 for images and other files
MySQL on EC2 or Amazon Aurora for your database.
Let me know if I covered everything :)
Thanks, you've covered everything. I now have the motivation to jump in, will get started with Lightsail and see how it goes.
Glad I can help Halafu 😃
I remember the day when I joined AWS in early 2014. It was one of the best decisions I ever made. After getting banned from Digital Ocean due to weird reasons, I was really disappointed because I loved their simple interface and predicted pricing model. But it turned out a blessing in disguise.
At first, it was a bit overwhelming to understand AWS services. But after some time, it became easy. Since then, I have been using AWS for everything (cloud hosting, emails, storage, DNS, CDN, analytics, etc.) for my own and clients projects. Pay as you go coupled with free tier is very economical for hosting hobby projects. Also, it is easy to pay together for all services rather than paying individually for each service to 3-5 different companies.
I really love AWS 💖 and highly recommend to others.
Glad its worked out for you Atta 😁
can you recommend some courses for a totally beginner who want to learn aws
Thanks you for this post. I have visited aws website in the past but couldn't understand a thing. Now I have a little bit insight. I just joined dev community today and already found so many great posts like this. Definitely bookmarking this:-)
Glad you can find value out of this Vatsal 😃. Welcome to the Dev community. You will love it here!
I would have eaten this up a few years ago. It's easy to forget how convoluted AWS is when first approaching it. Tremendous post.
(I am still eating this up. I still needed a simple explanation of some of these services.)
The first gif is still my reaction sometimes when exploring that mega menu 😅
Thanks a lot for this article. I have indeed felt overwhelmed every time I went to AWS website, like you describe it. This article is helpful to clear things out.
I haven't looked at the details of all explanations you give, but I think the EC2 explanation could be improved. The "Let’s make this easier to understand" didn't give me an understanding of how this is different from a shared hosting on 1and1, or from GoDaddy which you quote. The "What Amazon Says" section actually gives more hints on that.
Thanks again anyway!
Thanks for the critique Vic :) I could've went more in depth for sure.
This post is quite underrated. So helpful and easy to understand guide for any beginner to get started. 👍
Glad you think so 😃
Thanks a millie. A very nice resource for beginners
Thank you so much. Very useful for beginners.
Wow, so many services I didn’t know that’s even possible! Thank you for the post! You should get paid from Amazon for this.
Thanks Juneau :). Let Amazon know 🤣
Thanks for this post, I must practice AWS and your post explain to me what means many of the services.
Thanks for the helpful article. Recently found another good blog - romexsoft.com/blog/benefits-of-aws... and there are more information about AWS.
I've always wondered what DynamoDB and Amazon Aurora does. Would you be writing more about these in detail?
I could if there is more interest 😀
Amazing article. Easy to read and I now have a much better understanding of AWS. Thanks for the post Lewis!
Thanks so much for reading William. Glad it can be value to you 😃
What about Amazon Cognito? It is a complete authentication flow for your web applications, that is absolutely worth mentioning!
Some comments may only be visible to logged-in visitors. Sign in to view all comments.