Mastering Amazon ECS: Key Building Blocks Explained
Published: 2023-07-13 08:10:01

Amazon Elastic Container Service (ECS) is a comprehensive managed service offered by AWS, specifically designed to facilitate the seamless execution of containers in the cloud environment. ECS relieves developers from the burden of configuring intricate infrastructure settings, enabling them to focus solely on their application code. Whether it involves deploying a straightforward website or orchestrating elaborate distributed microservices with an extensive container fleet, ECS streamlines the entire process effortlessly.

Getting started with ECS is straightforward. To fully understand how it works and how you can use it, it helps to understand the basic building blocks of ECS and how they fit together!

## Amazon EC2

First, we need to understand EC2 building blocks because when it comes to launching your containerized applications with Amazon ECS, you have the flexibility to choose between two launch types: EC2 and Fargate. While both options offer powerful capabilities, Fargate takes container management to the next level by abstracting away the complexities of Amazon EC2 instances. With Fargate, you can shift your focus towards managing tasks, rather than worrying about the underlying infrastructure components. In this blog post, we'll delve into the key features and benefits of both launch types, highlighting the advantages of Fargate's simplified approach to containerization within ECS.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hhisffmxxpajbjq16ll7.png)



### 1. Instance

EC2 instances serve as reliable virtual machines (VMs) that offer a wide range of benefits. Notably, you can seamlessly connect to these instances using SSH, ensuring efficient management and control over your containerized applications. The beauty of EC2 lies in its ability to accommodate diverse customer requirements, encompassing memory, storage, and computing power. With numerous instance types available, you can easily find the perfect fit for your specific needs. If you're looking to run a small application or explore a free trial, the t2.micro instance type is an excellent choice. On the other hand, for memory-intensive workloads, options like R3 and X1 instances provide optimal performance. Furthermore, there is a rich assortment of additional instance types tailored to cater to a wide array of use cases.

With this multitude of EC2 instance types at your disposal, Amazon ECS empowers you to select the ideal configuration that aligns with your application's requirements. Whether you seek lightweight experimentation or robust, memory-optimized operations, EC2 instances offer the flexibility and scalability needed to fulfill your computing needs effectively.

### 2. AMI

AMI stands for Amazon Machine Image. In simple terms, an AMI acts as a vital source of information required to launch an instance. It encompasses critical aspects such as the root volume, launch permissions, and volume-attachment specifications. When it comes to AMI selection, you have multiple options at your disposal. **AWS offers a variety of Linux and Windows AMIs that you can readily leverage.** 

Alternatively, you can explore AMIs created and shared by the vibrant user community or browse through the extensive offerings in the AWS Marketplace. For instance, you might consider the Amazon ECS-Optimized AMI specifically designed to enhance ECS deployments. Additionally, if none of the existing options meet your requirements, you can even create your own custom AMI. By carefully choosing the appropriate AMI, you lay a solid foundation for successful instance creation within Amazon ECS. This step ensures that your instances possess the necessary configurations, permissions, and specifications to support your desired workload effectively.

### 3. Region

The expansive world of AWS is divided into regions, encompassing distinct geographic areas across the globe. 

> These regions include us-east-1 (N. Virginia), us-west-2 (Oregon), eu-central-1 (Frankfurt), ap-northeast-1 (Tokyo), and many more.

Each AWS region is meticulously designed to ensure complete isolation from one another. They consist of multiple independent data centers, forming an intricate network that creates a substantial "blast radius" in the event of failure. This means that even if an entire region experiences an outage, the others remain unaffected, safeguarding your operations from widespread disruptions. By strategically choosing the appropriate AWS region, you will have a solid foundation for your ECS operations, ensuring reliable and efficient container management within a geographically optimized environment.

### 4. Availability Zone

AWS regions are further divided into distinct units called Availability Zones. Each region comprises a minimum of two zones, and in some cases, multiple zones are available. These zones are physically isolated from one another and encompass different data centers within the region. However, they are interconnected via high-speed, low-latency fiber-optic networks and share certain underlying facilities.

The design of EC2 emphasizes mitigating the impact of common failures, ensuring that they are contained within a single zone and do not result in region-wide outages. By distributing your services across multiple zones and distributing workloads across hosts, you can achieve a high level of availability within a region.

This architecture provides a robust and fault-tolerant infrastructure, enabling you to design resilient applications that can withstand failures at the zone level. By strategically leveraging multiple Availability Zones, you can enhance the availability and reliability of your AWS services, ultimately delivering a seamless experience to your users.

### 5. Virtual Private Network(VPS)

The Amazon EC2-VPC (Elastic Compute Cloud - Virtual Private Cloud) capability allows you to construct a logically isolated virtual network environment within the AWS cloud. It gives you complete control over your virtual networking resources and allows you to customise and adjust your network settings to meet your individual needs.

Here are some key aspects and benefits of EC2-VPC:

- **Isolation and Security:** EC2-VPC enables logical isolation from other networks, enhancing security and privacy.
- **Subnets:** Divide your virtual network into subnets for IP address allocation and network segmentation, improving security and resource management.
- **Routing:** Manage routing tables to control traffic flow between subnets and the internet, allowing for complex network architectures.
- **Internet Gateway:** Facilitate outbound internet access and inbound traffic from the internet with an internet gateway.
- **Security Groups:** Define virtual firewalls to control inbound and outbound traffic at the instance level, ensuring network security.
- **Network ACLs:** Implement stateless packet filters at the subnet level to add an extra layer of network security.

# Amazon ECS building blocks


### Containers
The most important block of ECS are the containers. There is a huge misconception that containers are virtual machine but they are not. While virtual machines virtualize the hardware, containers take virtualization a step further by virtualizing the operating system. Containers are composed of processes running on the host system, interconnected through kernel constructs like namespaces and cgroups. However, the detailed inner workings of containers are not necessary to discuss in this post.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dslovhpzo9lyxw0hd7b8.png)



### Why We Need Containers?
Containers provide a game-changing capability of building, shipping, and running your code effortlessly across diverse environments.

In the pre-cloud era, self-hosting necessitated the purchase of physical machines, setting up and configuring the operating system (OS), and finally executing your code. However, with the advent of virtualization in the cloud, the process became streamlined by eliminating the hardware concerns and allowing direct focus on OS setup and code execution. Containers take this convenience a step further by simplifying the process to just running your code.

#### Advantages

A key advantage of containers is their ability to package all dependencies along with the code in what is known as an image. This self-contained package enables containers to be deployed on any host machine seamlessly. From an external perspective, hosts appear as holders of multiple containers, all sharing a generic nature that allows them to be deployed on any host.

Within the realm of ECS, you can effortlessly run your containerized code and applications across a managed cluster of EC2 instances. This powerful capability empowers you to leverage the scalability and flexibility of AWS infrastructure while seamlessly managing and orchestrating your containerized workloads.


### Container instance
An ECS container instance possesses distinct characteristics, including a precisely defined IAM policy and role, tailored to facilitate seamless integration with the ECS service. Additionally, these container instances are registered into your ECS cluster, forming an essential part of the overall infrastructure.

As you may have anticipated, within these instances, containers come into play. It is within the ECS container instances that you execute and manage your containerized workloads, leveraging the flexibility and scalability provided by the underlying EC2 infrastructure. By understanding the unique composition of ECS container instances and their pivotal role in the ECS ecosystem, you can harness the power of containerization to effectively deploy and orchestrate your applications with ease and precision.

### Cluster
In ECS, an ECS cluster is a grouping of container instances* (or tasks in the case of Fargate) within a specific AWS region. These clusters can span multiple Availability Zones, offering redundancy and resilience.

When launching an instance (or tasks in the case of Fargate) within ECS, it automatically registers with the default cluster named "default" unless specified otherwise. If the default cluster doesn't exist, ECS creates it on the fly. Additionally, you have the flexibility to scale and delete your clusters based on your requirements. ECS clusters provide a streamlined approach to container management, enabling efficient organization and control over your container instances or tasks. By leveraging clusters, you can enhance the reliability and scalability of your containerized applications within the ECS environment.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dtzrqxl2waein8444qg1.png)



### Agent

The Amazon ECS container agent, a Go program, operates within its own container on each EC2 instance used with ECS. It serves as the intermediary component, facilitating communication between the scheduler and your instances. Running the agent on your instance is necessary for registering it into a cluster, which provides both a logical boundary and a resource pool.

### Task & Task Definition
In ECS, containers are executed as part of a task, necessitating the creation of a task beforehand. Tasks serve as a logical grouping of 1 to N containers that run together on the same instance. The value of N can be up to 10 containers.

However, we can't create a task directly. Instead, you must create a task definition, which specifies the composition of the task. It's comparable to an architectural plan for a city. A task definition defines which containers are part of the task and includes details about container interaction, CPU and memory constraints, and task permissions using IAM roles.

Once you have a task definition, you can instruct ECS to start a task using that specific definition. While it may seem like extra planning initially, as you encounter scenarios involving multiple tasks, scaling, upgrades, and other real-life situations, the value of task definitions becomes evident. They provide a systematic approach to manage and track tasks within ECS, ensuring efficient container execution and orchestration.

### Scheduler
The ECS scheduler is a vital component of the hosted orchestration layer provided by ECS. In simple terms, hosted means that ECS takes care of managing the scheduler on your behalf, saving you from the hassle of handling it yourself. While your applications run in containers on your instances, ECS manages the tasks for you, alleviating your concerns.

The scheduler's role is to decide which containers run on which instances based on specific constraints. For instance, if you need to scale a custom blog engine for high availability, you can create a service that automatically distributes tasks across all zones in your chosen region. By using the distinctInstance task placement constraint, you can ensure that each task runs on a different instance. ECS not only handles these assignments but also takes care of automatically restarting failed tasks.

With the ECS scheduler, you can focus on your applications, knowing that the task assignment and management are being efficiently handled. This simplifies the process of scaling, distribution, and ensuring high availability for your containerized workloads. Let ECS do the heavy lifting, while you enjoy the benefits of a simplified and streamlined container orchestration experience.

### Service

A service in ECS is a unique concept that allows you to specify the desired number of tasks to be running at any given time, based on a specific task definition. If you set N=1, it means "ensure that this task is running and restart it if necessary!" This ensures that your task remains operational, with ECS automatically monitoring and restarting it if needed. On the other hand, with N > 1, you can effectively scale your application by running multiple instances of the task, while still ensuring that each task remains running.

By leveraging ECS services, you can simplify the management and scaling of your application tasks. ECS takes care of the underlying orchestration, enabling you to focus on developing and deploying your applications with confidence. Whether you need a single task or multiple instances running, ECS services provide a convenient mechanism for achieving seamless task management and scaling capabilities.

### Load Balancer

Amazon ECS distributes incoming traffic among numerous containers or jobs by interacting with Elastic Load Balancing (ELB). This connection enables you to expose your containerized applications to the internet or internal networks, allowing for increased availability and scalability. ECS provides customizable load balancing mechanisms adapted to your application's individual demands, whether you choose Application Load Balancers (ALBs) for advanced routing and HTTP/HTTPS traffic or Network Load Balancers (NLBs) for high-performance load balancing at the transport layer. This ECS/ELB combo ensures that your application can handle increased traffic volumes, optimises resource utilisation, and provides fault tolerance for a resilient and responsive user experience.

### Conclusion
In this blog post, we explored the key concepts and components of Amazon Elastic Container Service (ECS). We learned that ECS provides a managed environment for running containers in the cloud, eliminating the complexities of infrastructure configuration. By leveraging ECS, you can easily deploy and manage containers, whether it's for hosting a simple website or running complex distributed microservices.

We discussed the importance of understanding ECS building blocks such as clusters, instances, tasks, and services. Clusters act as logical groupings of container instances, while tasks represent a grouping of containers running together on the same instance. Services simplify task management and scaling, ensuring the desired number of tasks are running at all times.

Additionally, we touched upon the role of the ECS scheduler, which automates the allocation of containers to instances based on defined constraints. The scheduler plays a crucial part in achieving high availability, scalability, and efficient resource utilization.

You can explore more on ECS from following:

Amazon ECS Documentation: https://docs.aws.amazon.com/ecs
AWS Blog On Containers: https://aws.amazon.com/blogs/containers
AWS ECS GitHub Repository: https://github.com/aws/amazon-ecs-agent