Unpacking the Power of AWS ECS: A Comparative Look at ECS on EC2 vs. ECS on Fargate
Tags: docker, aws, sre, cloud
Published: 2023-09-21 20:35:15

## Introduction
I've had the privilege of working with a multitude of cloud-native technologies. Among these technologies, Amazon ECS (Elastic Container Service) stands out as one of the robust, scalable container orchestration service that allows for easy application deployment and management. Within the ECS ecosystem, there are two main launch types: ECS on EC2 and ECS on Fargate. This article aims to dissect the features, benefits, and best-use cases for each, enabling you to make an informed decision for your application needs.

## ECS: A Brief Overview

Amazon ECS is a fully-managed container management service that enables you to run Docker containers at scale. It integrates well with other AWS services like ECR (Elastic Container Registry), ELB (Elastic Load Balancing), and IAM (Identity and Access Management) to provide a full-fledged container orchestration platform. ECS handles the orchestration and provisioning of containers, letting you focus on application logic and performance.

### ECS on EC2

When using ECS on EC2, Amazon EC2 instances act as the underlying infrastructure. You have the flexibility to choose your instance types, VPC configurations, and security groups, among other settings. ECS Agent, a component running on each EC2 instance in the cluster, communicates between the instance and the ECS control plane.

#### Advantages

- Great for Fine-Grained Control: Access to underlying EC2 instances provides more control over networking, storage, and compute resources.
- Pick & Choose: In terms of compute, pick between instances that are CPU optimized, memory optimized or network optimized.
- Resource Optimization: Utilize EC2 Spot Instances to maximize cost-savings.
- Customization: Leverage custom AMIs (Amazon Machine Images) tailored to your application’s specific requirements.

#### Drawbacks

- Operational Overhead: Responsibility for EC2 instance patching, scaling, and failure recovery.
- Cost: Potentially higher costs for a non-predictable or burst loads, due to the use of reserved EC2 instances and load balancers.

### ECS on Fargate

AWS Fargate is a serverless compute engine for containers. When you choose Fargate as your ECS launch type, you no longer have to manage the underlying EC2 instances.

#### Advantages

- Its Quick: Spend less time on setup.
- Serverless: No need to manage the underlying servers, thereby reducing operational complexity.
- Ease of Scaling: Autoscaling is straightforward and can be automated to a large extent.
- Predictable Pricing: Pay for vCPU and memory resources that your containerized application requests.

#### Drawbacks

- Limited Customization: Less control over the underlying infrastructure.
- Potentially Higher Costs: Depending on your workload, Fargate could be more expensive than optimized EC2 instances as the cost is calculated based on both the resources utilized and the duration it ran.

## Best Use-Cases

### ECS on EC2:

- Data-Intensive Workloads: If your application requires fast access to large data sets, EC2 instances with high I/O are preferable.
- High utilization: Sustained and predictable service with high utilization.
- Legacy Applications: Migrating traditional apps to containers may require fine-tuned customization available in EC2.
- Existing EC2s: You have existing EC2s that are not fully utilized

### ECS on Fargate:

- Microservices: For independent, loosely-coupled architectures, Fargate offers rapid scaling and deployment.
- DevOps Automation: If your focus is on CI/CD and quick deployments, Fargate minimizes infrastructure management.
- Short Adhoc jobs: Great for shorter running adhoc jobs.
- Great for Flexibility: No need to worry about long-term ownership of resources. Once the task is done, give it back.

## Conclusion

Both ECS on EC2 and ECS on Fargate have their merits and drawbacks. Your choice between the two will largely depend on your application requirements, your need for customization, and how hands-on you wish to be with infrastructure management. As cloud technologies continue to evolve, it's crucial to revisit your choices to ensure they align with your evolving business needs.

## Happy containerizing!