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?
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 😃
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.
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 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
Thanks for the detailed response.
Great response Andrew!
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.