AWS for the rest of us

A not developer's guide to AWS.

AWS is the premier cloud provider - they sell the infrastructure building blocks to build modern apps.

  • Today, most applications run in the cloud - e.g. on rented servers - and AWS made $35B last year selling them
  • AWS products fit into 3 buckets: Infrastructure as a Service (IaaS), Platform as a Service (PaaS), and Software as a Service (SaaS)
  • AWS provides a web UI to provision and configure servers, but bigger teams will use their API to do this through code instead
  • Some of AWS’s most popular products are EC2 (simple compute), S3 (simple storage), and RDS (a managed database )

There are other big cloud providers – namely Google (GCP) and Microsoft (Azure), but AWS holds something close to a 50% market share. If you know or work with a developer, chances are they’ve used AWS.

Cloud services: a basic primer

To understand what AWS actually does, you need to understand the cloud in general. For a more in depth explanation, check out the Technically post about cloud here.

There are basically two ways to run an app - locally or over the internet. In the “old” days (i.e. high school), most apps ran locally - you’d get a copy of Excel via a CD , or download it from the web. All of the computing that Excel did - both the “graphical” frontend you interacted with, and all of the math that happened behind the scenes - took place on your laptop. Even if Excel did sometimes communicate with the web, it was only to pull in a data source and get updated. You usually paid a one time fee to buy the software, or licensed it yearly.

Things have changed a lot since then. Now, most software runs over the internet - you access it via your browser. And even if there’s a desktop app, a lot of the hard work is getting done via the internet. So what does it mean exactly for an app to run on the web?

Cloud architecture diagram showing how web apps run on servers

Cloud-based apps have most of their code deployed on a big, powerful server in someone’s data center - not on your computer. When you load up Twitter, your browser is sending a request to a web server - that server runs a bunch of code, generates your feed, and then sends back a bunch of HTML that makes up what you see. The same thing happens when you use Office365 over the web, or Gmail, or any other cloud-based service.

Web servers that handle and route requests from a browser are just one very small piece of a much larger puzzle. Most apps need a database; a lot of apps need multiple types of databases; and as apps get larger and more complicated, they start to require increasingly unique and specialized services. A few examples:

  • A data warehouse for analytics
  • Messaging services for streaming data (Technically post coming soon)
  • Video encoding and decoding (Technically post not coming soon)
  • ETL tools for moving data around

AWS has solutions for all of these, and also like 400 more things. The hard part is organizing them. And also naming them. AWS does an inexplicably horrible job of naming their products (it’s a meme at this point).

IaaS, PaaS, and SaaS

AWS literally has hundreds of different products, and someone is using all of them. Even the AWS team struggles to organize and market them effectively. But the easiest way to understand the breakdown is by splitting things into 3 categories, ordered from basic to more “white glove” or “managed:”

1. Infrastructure as a Service (IaaS)

IaaS is the basic, lower level infrastructure that you need to build an app. Generally, this translates into:

  • Basic compute on a virtual machine (AWS product: [EC2](https...