Elastic Compute Cloud (EC2)

Rationale#

AWS EC2 is the service we use for running computing machines on the cloud. It provides the required infrastructure for services like our CI, Kubernetes Cluster, among others.

The main reasons why we chose it over other alternatives are:

  1. It seamlessly integrates with other AWS services we use like ECS, EKS, Batch, Elastic Load Balancing, etc.
  2. It provides a wide range of machine types that goes from 2 Vcpus and 0.5GB RAM, to 224 Vcpus and 24576GB RAM machines. Providing us with the capability of vertical scaling.
  3. Machine types are also divided into different specializations. There are general usage, compute optimized, memory optimized, storage optimized and accelerated computing machines. By having all these different types of machines, we can easily select which ones to work with depending on the nature of the problem we are trying to solve.
  4. It supports Spot Instances, which are unused instances that are available for less than the on-demand price. Spot Instances can be up to 90% cheaper than on-demand instances. Spot Instances can can be terminated by AWS if capacity is no longer available, making them a perfect fit for interruptible tasks like CI/CD jobs, Batch tasks and horizonally-scaled applications like our ASM.
  5. It supports Auto Scaling, which allows us to automatically scale up and down the number of machines that are running our applications. This is especially useful when combined with our Kubernetes Cluster running on EKS, as multiple instances of our ASM can be turned on and off based on specific parameters.
  6. It supports advanced networking features that allow assigning public IP addresses, having multiple network interfaces, connecting to virtual private clouds, among others.
  7. It supports advanced security configurations like setting security groups for specifying what ports can be accessed, filtered by both IP ranges and network protocols, network isolation, connecting to instances using SSH keys, among others.
  8. It supports many operating systems, including the most common Linux distributions, MacOS, Raspbian, and Windows Server. Giving total flexibility when implementing solutions that require a specific OS.
  9. It supports amazon machine images, such virtualization images allow us to turn on preconfigured instances without having to worry about setting things up.
  10. It provides a dynamic resource limiting approach, which gives us the capability of horizontal scaling. Sending quota increase requests is also possible.
  11. Instance resources and state can be easily monitored using CloudWatch.
  12. Instances can have external disks by using EBS, meaning that all data within an instance persists in case it ceases to exist.

Alternatives#

  1. Google Compute Engine: It did not exist at the time we migrated to the cloud. Pending to review.
  2. Azure Compute: It did not exist at the time we migrated to the cloud. Pending to review.

Usage#

We use AWS EC2 for:

  1. Running CI workers and bastion.
  2. Running Kubernetes Cluster workers and autoscaling.
  3. Running Batch workers.
  4. Running Okta RADIUS agent.
  5. Running ERP.
  6. Running Jumpcloud LDAP agents (this is currently being deprecated).

Guidelines#

  1. You can access the AWS EC2 console after authenticating on AWS.