Move to the Next Level of Load Balancing on AWS

Andreas Wittig – 08 Jul 2017

Are you still using the Classic Load Balancer - formerly known as Elastic Load Balancer - for distributing incoming requests among a fleet of EC2 Instances? AWS announced the Application Load Balancer, as a new alternative to the Classic Load Balancer in November 2016. It’s about time to benefit from the next-generation load balancer!

The Classic Load Balancer, as well as the Application Load Balancer, are managed services provided by AWS offering high availability and scalability out-of-the-box.

But what are the differences between the Classic Load Balancer and the Application Load Balancer?

Classic Load Balancer Application Load Balancer
Load Balancing Type Layer 4 or Basic Layer 7 Advanced Layer 7
Supported Protocols TCP, SSL (secure TCP), HTTP, HTTPS HTTP, HTTPS, HTTP/2, WebSockets
Path- and Host-Based Routing ❌ n/a ✅ out-of-the-box
EC2 Container Service support ❌ n/a ✅ out-of-the-box
Web Application Firewall ❌ n/a ✅ out-of-the-box

Let’s dive into the details of two of these differences.

Path- and Host-Based Routing

Are you operating load balancers (e.g. HAProxy) on top of EC2 Instances yourself to provide path- or host-based routing? The chances are high that you can simplify your infrastructure by using an Application Load Balancer.

Routing incoming requests based on path or host headers, as shown in the following figure, is possible with the Application Load Balancer by default.

ALB Routing

The following steps are needed to configure an Application Load Balancer:

Looking for a new challenge?

  • tecRacer

    Cloud Consultant • AWS Migrations

    tecRacer • Premier AWS Consulting Partner • Germany, Austria, Portugal, and Switzerland
    Assessment Transformation Change Management

    Senior Lead Full Stack Developer

    DEMICON • AWS Advanced Consulting Partner • Remote
    AWS JavaScript/TypeScript Angular React

  1. Add a Listener to your Application Load Balancer by specifying a port and protocol.
  2. Create a Target Group.
  3. Register a Target, consisting of an EC2 Instance ID and port, at your Target Group.
  4. Define a Listener Rule mapping incoming requests based on path or host with your Target Group.

Works with ECS

The EC2 Container Service (ECS) provides a container management service. ECS is distributing your containers across a fleet of EC2 Instances. To be able to send requests to one of the containers providing a particular service a client needs to know where to send its requests. But as ECS needs to launch containers dynamically based on load, during deployments or because of a failure within the cluster it is not an option to use static ports and IP addresses.

As shown in the following figure ECS is integrated with the Application Load Balancer. Whenever ECS launches a new container, a dynamic port is assigned and registered as a target at a Target Group.


A client sends its request to the Application Load Balancer. The Application Load Balancer is forwarding the request to a dynamic port mapped to a container running on one of the EC2 Instances that are forming the ECS cluster.


The Application Load Balancer provides powerful features as path- and host-based routing, integration with ECS, as well as HTTP/2 and WAF support.

It’s about time to use the Application Load Balancer for new infrastructures and migrate from Classic Load Balancers to Applications Load Balancers within existing infrastructures as well.

Want to learn more about the Application Load Balancer? In our A Cloud Guru online course Deep Dive into Application Load Balancer, we’ll introduce you to the Application Load Balance in AWS, and show you how to take advantage of its powerful features. Nine hands-on labs and console walkthroughs will increase your skills and enable you to gain practical experience with the Application Load Balancer (ALB).

Become a cloudonaut supporter

Andreas Wittig

Andreas Wittig ( Email, Twitter, or LinkedIn )

We launched the cloudonaut blog in 2015. Since then, we have published 360 articles, 50 podcast episodes, and 48 videos. It's all free and means a lot of work in our spare time. We enjoy sharing our AWS knowledge with you.

Please support us

Have you learned something new by reading, listening, or watching our content? With your help, we can spend enough time to keep publishing great content in the future. Learn more

Amount must be a multriply of 5. E.g, 5, 10, 15.

Thanks to Alan Leech, Alex DeBrie, ANTHONY RAITI, Christopher Hipwell, Jaap-Jan Frans, Jason Yorty, Jeff Finley, Jens Gehring, jhoadley, Johannes Grumböck, Johannes Konings, John Culkin, Jonas Mellquist, Juraj Martinka, Kamil Oboril, Ken Snyder, Markus Ellers, Ross Mohan, Ross Mohan, sam onaga, Satyendra Sharma, Shawn Tolidano, Simon Devlin, Thorsten Hoeger, Todd Valentine, Victor Grenu, and all anonymous supporters for your help! We also want to thank all supporters who purchased a cloudonaut t-shirt.