Quick Links

The AWS ecosystem is complicated, and much different than the traditional cloud providers you may be used to. We'll explain the differences, what their various services are used for, and how they stack up to the competition.

How is Amazon AWS Different from Other Cloud Providers?

To put it simply---they have everything. AWS has so many services that we couldn't list them all in this article, so there will almost certainly be something to suit your use case.

You'll likely make use of multiple AWS services, rather than renting a large server or two to run everything. This is the major change compared to other providers, but it should make your network much more scalable and fault tolerant. Deployment times for new EC2 compute instances are in the minutes, and you can create them from snapshots you define, which makes auto-scaling of your network a viable and recommended option.

AWS is a lot more managed than other cloud providers, and often provides prebuilt solutions for common cloud problems, like databases, content delivery networks, and storage. You won't have to spend hours configuring these services or setting up your own solutions. You're not locked into using anything (for example, you could always use an EC2 instance to run your database), but the prebuilt solutions will often come at a price advantage anyway, and with almost every service having a free tier, it doesn't hurt to try things out.

AWS is also split up into zones, defined by the region they're in. Data that's transferred between regions usually counts as data transferred over the internet, and may cost more. Regions also have different prices depending on AWS's infrastructure, so data stored in Australia will cost more than in the US. Some services, like EBS volumes, are locked to the region they were created in unless you back them up to S3 and transfer regions.

On top of splitting everything by region, AWS also has availability zones within those regions, for individual data centers. Having two instances in different availability zones doesn't matter as much as regions, since they're connected with low latency links, but it is something you should take into account when launching new instances.

aws availability zones model

You should probably stick to using a single region and availability zone unless you have a good reason not to, just to prevent possible headaches down the road.

How Does AWS Pricing Even Work?

AWS pricing is extremely metered and a little complicated at times. There's no flat rates for AWS services; AWS breaks down the pricing of each service into many different categories. You can visit the /pricing page of any AWS service to view detailed information about what exactly you'll be charged for.

Let's break down an example bill. Here we have one running t2.small EC2 instance in the Northern Virginia region. We're charged for each hour it's running, which is $17.11, but we're also charged for the how much storage space we've allocated to this instance---$8 for 80 GB.

We're also keeping a snapshot of the data on disk as a backup, which costs less than the provisioned storage, but still costs money. We're also charged for "Elastic IP Address not attached to a running instance", since AWS IP addresses cost money to keep if you're not using them, which is something you might not catch until you find it on the bill. We also have an instance running in the Ohio region, which is under a separate category on the bill and in the EC2 Management Console.

On top of all the various EC2 charges, we're charged for data transfer across all of AWS. It's broken down by type, but totalled up at the bottom to 15 GB, which costs $1.37. You'll be charged for data transfer for most services, from S3 storage to EC2, from EC2 out to the Internet, etc. The main thing that's free is data transferred from S3 to CloudFront, Amazon's CDN, but only because CloudFront-to-Internet costs money and you'd be charged twice otherwise. Just keep in mind that anytime you're moving data around or through AWS, you're being charged for it.

How Much Does AWS Cost?

AWS does come at a price premium compared to other hosting solutions like Digital Ocean, Linode, and OVH. If you're only making use of one AWS service, like EC2, you might be better off going with a different host.

However, if you are willing to pay a premium for easy configuration and rapid setup of your network, AWS can save you time on development and configuration of servers. Reserved instances are also much cheaper than on-demand instances, and can save a lot of money on EC2 costs, though you should only commit to one if you know how much you need.

You can use the AWS Pricing Calculator to find out how approximately much AWS is going to cost you before buying, and you can use the Cost Explorer to view past and forecasted pricing for your current AWS resources. AWS also has a very generous free tier for most of their services, allowing you to prototype some applications at no cost.

EC2 - Regular Servers, Lots of Options

Amazon's Elastic Compute Cloud (EC2) is their general purpose cloud service, and you'll almost certainly be using it in some form if you're running on AWS. A running EC2 server is called an instance, and they're built around scalability; you can automatically launch new instances from templates within minutes and deploy as much computing power as you'll need.

You can launch new instances from the EC2 Management Console, which will show everything you have running.

There are many different types of EC2 instances, all optimized for different things. They'll each have their own identifier, like

        c5.4xlarge
    

. You can install any OS you'd like, including images preconfigured with various software, or you can launch new instances from snapshots you define.

Unlike other hosts where you'll often have to rent servers for long periods of time, you can deploy EC2 instances on the spot to meet fluctuating demand. If your website experiences a lot of traffic during the day, but slows down at night, there's not much reason to be paying to keep your network at maximum capacity, and you can safely scale things back until morning. AWS makes it easy to do this kind of time-based scaling with EC2 Auto Scaling.

Storage and Data Hosting

AWS has three main storage services for you to use. The most common is Elastic Block Storage (EBS), which is the default used for EC2 instances. These are volumes that can only be accessed when they're mounted to an EC2 instance. They are intended to be cloud hard drives that you can move around between instances and save snapshots of. The default EBS type is a General Purpose SSD, but there are different types of volumes.

Simple Storage Service (S3) is Amazon's standalone data hosting service. S3 stores individual files as objects in a flat hierarchy, and is much cheaper for storing a lot of data (over 4 times as cheap as EBS). You fill up buckets of data, and you're charged per GB, with separate tiers if you store over 50TB.

You can reference files by their ID to retrieve them either into EBS volumes or out to the internet via the AWS command line toolkit, and you're charged per GB for all the data you retrieve. Data that you don't retrieve too often can be moved to S3 Glacier, which charges less per GB stored but charges more for retrieval, perfect for archiving.

Elastic File System (EFS) is somewhere in between. It's basically a scalable cloud NAS for your AWS services; It has structure and directories, can be accessed by multiple EC2 instances at a time, and will grow as you add more files. However, it's much more expensive than S3 or EBS, and can be slower as well, so you should only use it if your application really needs it.

Load Balancers

Load balancers are entry points for your network that can balance traffic across multiple EC2 instances or containers. They're fairly simple to set up, but will be an integral part of any network setup that needs to use multiple servers.

Pricing for load balancers is a little complicated, but you'll be billed hourly for whatever your most used resource is, from new connections, active connections, processed GB, or rule evaluations. If your load balancer processed a lot of data for only a few connections, you'll be billed based on that.

RDS - Amazon's Hosted Database Service

Amazon's Relational Database Service (RDS) makes setting up a database server easy. Everything is fully managed, so you won't have to worry about technical issues of configuring a DB server. RDS databases are easy to scale, with support for read replicas and load balancers.

RDS supports multiple different database types, including MySQL and PostgreSQL, but perhaps more interesting is Aurora, Amazon's own database which is MySQL and PostgreSQL compatible while being five times faster and much cheaper.

Whatever you choose, you'll pay per GB for database storage and per GB for data transfer. If you're not using Aurora, you'll also have to pay for compute to run the database server, which you'll be charged per hour for. This is the major benefit of Aurora; since it's all managed by Amazon, you don't need a dedicated server, and the cost is kept low.

Alternatively, you can always run your own server with an EC2 instance, but you'll be paying just as much for EBS storage.

Lambda and Elastic Beanstalk - Apps Without Servers

Lambda and Elastic Beanstalk are different ways to run apps without managing servers. For Elastic Beanstalk, the idea is that you can upload your code and let the service handle the allocation of AWS resources automatically, so you won't have to spend time as a sysadmin to get your code up and running. This can be very useful for small applications, and you'll always have full control over any instances created by the service should you need to configure things manually later. Elastic Beanstalk is free to use by itself, but you'll have to pay for whatever it allocates.

Lambda is a bit different, and allows you to run code in AWS's ecosystem without servers. You create a Lambda function, choose a runtime like Node 8.10 or Python 3.7, and your code will run when that function is triggered, either manually or automatically. You can set up triggers to run your code when data is put into an S3 bucket or when fired from other AWS services. You're charged based on how much memory you use, and how long you're using it for.

Cloudfront - Amazon's CDN

Cloudfront is Amazon's content delivery network (CDN), used to power Prime video and Hulu. If you need to deliver a lot of static content to a lot of people, a CDN will help relieve the stress of having to set up multiple instances of web servers with load balancers. Cloudfront caches your content in multiple datacenters around the world and delivers it for way cheaper than EC2 would.

Cloudfront functions as the entry point for large scale web apps, and is optimized for dynamic content as well, supporting both the WebSockets protocol and traditional HTTP POST requests. You can also run Lambda code on the same servers as Cloudfront, called Lambda@Edge. Since you're running much closer to your users, you can perform operations with much lower latency.

Pricing is fairly simple; you're charged based on how much data is sent over the network, and how many individual requests are made. One important thing to note though is that data transferred from S3 to CloudFront (and out to the Internet) is free. You only pay for CloudFront, which is cheaper than S3 per GB.