How can I set up an AWS elastic load balancer to achieve the requirements of setting up a load balancer for ?
I am currently working as a cloud architect for a large e-commerce company that has recently migrated its application to AWS. As a part of the migration, I have been tasked with setting up a load balancer for distributing incoming traffic across multiple EC2 instances hosting your application. Describe to me how can I set up an AWS elastic load balancer for achieving these requirements. Include the types of AWS LBs you would use, the Configuration setting I would apply and how can I ensure high availability and scalability for my application.
In the context of AWS, here is a detailed plan that would outline the setup of the AWS elastic load balancer for the given scenario:-
Application load balancer
You can create a target group for each microservices for communication with EC2 Instances.
You can configure listeners to handle incoming HTTP/HTTPS traffic and define which can route to target groups.
You can enable session stickiness for maintaining session persistence for the user interacting with specific microservices.
Network load balancer
You can define the target group with the health Checking setting for EC2 instances running my microservices specifying the protocol and port for health Checking.
You can configure listeners for TCP/IP, mapping to target the group based on the required port number for each microservice.
You can implement connection draining for gracefully handling the shutdown of EC2 instances without disrupting the active connection.
Here is the example given of how you can Create an application load balancer (ALB) with listeners and target groups:-
Resources:
MyALB:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
Name: MyALB
Subnets:
- !Ref Subnet1
- !Ref Subnet2
SecurityGroups:
!Ref MyALBSecurityGroup
Scheme: internet-facing
Type: application
MyTargetGroup:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
Name: MyTargetGroup
Port: 80
Protocol: HTTP
VpcId: !Ref MyVPC
HealthCheckEnabled: true
HealthCheckPath: /health
HealthCheckProtocol: HTTP
TargetType: instance
Targets:
- Id: !Ref EC2Instance1
- Id: !Ref EC2Instance2
MyListener:
Type: AWS::ElasticLoadBalancingV2::Listener
Properties:
DefaultActions:
Type: forward
TargetGroupArn: !Ref MyTargetGroup
LoadBalancerArn: !Ref MyALB
Port: 80
Protocol: HTTP
Here is the example given of how you can Create a Network load balancer (NLB) with listeners and target groups:-
Resources:
MyNLB:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
Name: MyNLB
Subnets:
- !Ref Subnet1
- !Ref Subnet2
SecurityGroups:
!Ref MyNLBSecurityGroup
Scheme: internet-facing
Type: network
MyTargetGroup:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
Name: MyTargetGroup
Port: 80
Protocol: TCP
VpcId: !Ref MyVPC
HealthCheckEnabled: true
HealthCheckIntervalSeconds: 30
HealthCheckPort: 80
HealthCheckProtocol: TCP
HealthCheckTimeoutSeconds: 10
HealthyThresholdCount: 3
TargetType: ip
Targets:
- Id: !Ref EC2Instance1
- Id: !Ref EC2Instance2
MyListener:
Type: AWS::ElasticLoadBalancingV2::Listener
Properties:
DefaultActions:
Type: forward
TargetGroupArn: !Ref MyTargetGroup
LoadBalancerArn: !Ref MyNLB
Port: 80
Protocol: TCP