Know Your Cloud: AWS Compute

This is the first in a series about what you need to focus on learning about cloud software development. I will go on to discuss design in the next series but this gets you started on the basics.

Compute resources execute computational tasks for apps and services programmatically. In Amazon land, Compute Services include AWS EC2 which allows you to control multiple servers in the cloud using configuration or code to services like AWS Lambda which lets you execute code without a server by borrowing resources and returning them when done.

I am going to assume you have a basic understanding of Fabric Computing. If not, a simple (maybe too simplistic but we are beginning in this case) description is a grid of connected computers that have controller software that makes them look like one computer to the programmer. That grid is a fabric. And the reason you care about fabrics in cloud compute is because compute resources are what allow you to control those multiple machines when executing your code. This all appears seamless to the developer (if not the architect).

Rather than repeating what you could learn in the many Amazon Web Services (AWS) and Microsoft Azure tutorials online, I want to sift through the most useful cloud services I have used in the last decade. This way, you can focus on what is used the most and what will give you a good foundation no matter which flavour of cloud you use.

Note: I know AWS best so expect references to Amazon products. I will map to Azure if I have equivalent experience.

Grouping Compute Services

Think about cloud compute services in four distinct groups:

  • Instances – can be thought of a virtual machines and all the things you can do with multiple machines behind your software, like scaling elastically when resources (CPU, RAM, etc…) are required; Running up servers with fully installed software without having to manually build them; and Batch processing — to name a few services;
  • Containers – a useful way of packaging your software so you can have multiple instances and share dependencies. Again, there are many benefits to containers and they are not cloud specific;
  • Serverless – running code without having a dedicated server for it. Instead you borrow processing power to compute and return it when you are done. This means you pay as you go without paying for hosts. Don’t be fooled though, I have been hit with massive serverless compute bills that made me gasp; and
  • All of the above – this combination is for when you need as much control as possible like on premise cloud, disconnected applications and services or when latency is very high priority.

Which Compute Services should I know?

There are so many and I am of the school that you should learn the most useful services first and know them well before going ninja level and adding all the other cool stuff.

Here is the complete list of AWS Compute Services.

Here is what I think you absolutely need to understand (if not use):

  • Amazon Elastic Compute Cloud (EC2) – start with On-Demand Resources and control all your cloud resources programmatically;
  • Amazon EC2 Auto Scaling – this is for auto-scaling high-volume apps or apps with peak behaviour that drive spikes in resources and can make systems fall over under unexpected load. I am talking a lot of load but even with small instances, you might need more for a special event or just in case; and
  • AWS Lambda – upload code, run it, get your result and leave. For the developer who knows what she wants.

Like I said above, I won’t sit here and attempt to take you through learning each of these because greater people have done that better. The point of this is to tell you the basics that you need to learn to even work in the cloud development world.

Make it rain.

Leave a comment