Skip to content
v2.273.0

Amazon Elastic Load Balancing Construct Library ​

The aws-cdk-lib/aws-elasticloadbalancing package provides constructs for configuring classic load balancers.

Configuring a Load Balancer ​

Load balancers send traffic to one or more AutoScalingGroups. Create a load balancer, set up listeners and a health check, and supply the fleet(s) you want to load balance to in the targets property. If you want the load balancer to be accessible from the internet, set internetFacing: true.

ts
declare const vpc: ec2.IVpc;
const lb = new elb.LoadBalancer(this, 'LB', {
  vpc,
  internetFacing: true,
  healthCheck: {
    port: 80,
  },
});

declare const myAutoScalingGroup: autoscaling.AutoScalingGroup;
lb.addTarget(myAutoScalingGroup);
lb.addListener({
  externalPort: 80,
});
python
# vpc: ec2.IVpc

# my_auto_scaling_group: autoscaling.AutoScalingGroup

lb = elb.LoadBalancer(self, "LB",
    vpc=vpc,
    internet_facing=True,
    health_check=elb.HealthCheck(
        port=80
    )
)
lb.add_target(my_auto_scaling_group)
lb.add_listener(
    external_port=80
)
java
IVpc vpc;

AutoScalingGroup myAutoScalingGroup;

LoadBalancer lb = LoadBalancer.Builder.create(this, "LB")
        .vpc(vpc)
        .internetFacing(true)
        .healthCheck(HealthCheck.builder()
                .port(80)
                .build())
        .build();
lb.addTarget(myAutoScalingGroup);
lb.addListener(LoadBalancerListener.builder()
        .externalPort(80)
        .build());
csharp
IVpc vpc;

AutoScalingGroup myAutoScalingGroup;

var lb = new LoadBalancer(this, "LB", new LoadBalancerProps {
    Vpc = vpc,
    InternetFacing = true,
    HealthCheck = new HealthCheck {
        Port = 80
    }
});
lb.AddTarget(myAutoScalingGroup);
lb.AddListener(new LoadBalancerListener {
    ExternalPort = 80
});
go
var vpc IVpc

var myAutoScalingGroup AutoScalingGroup

lb := elb.NewLoadBalancer(this, jsii.String("LB"), &LoadBalancerProps{
	Vpc: Vpc,
	InternetFacing: jsii.Boolean(true),
	HealthCheck: &HealthCheck{
		Port: jsii.Number(80),
	},
})
lb.AddTarget(myAutoScalingGroup)
lb.AddListener(&LoadBalancerListener{
	ExternalPort: jsii.Number(80),
})

The load balancer allows all connections by default. If you want to change that, pass the allowConnectionsFrom property while setting up the listener:

ts
declare const mySecurityGroup: ec2.SecurityGroup;
declare const lb: elb.LoadBalancer;
lb.addListener({
  externalPort: 80,
  allowConnectionsFrom: [mySecurityGroup],
});
python
# my_security_group: ec2.SecurityGroup
# lb: elb.LoadBalancer

lb.add_listener(
    external_port=80,
    allow_connections_from=[my_security_group]
)
java
SecurityGroup mySecurityGroup;
LoadBalancer lb;

lb.addListener(LoadBalancerListener.builder()
        .externalPort(80)
        .allowConnectionsFrom(List.of(mySecurityGroup))
        .build());
csharp
SecurityGroup mySecurityGroup;
LoadBalancer lb;

lb.AddListener(new LoadBalancerListener {
    ExternalPort = 80,
    AllowConnectionsFrom = new [] { mySecurityGroup }
});
go
var mySecurityGroup SecurityGroup
var lb LoadBalancer

lb.AddListener(&LoadBalancerListener{
	ExternalPort: jsii.Number(80),
	AllowConnectionsFrom: []IConnectable{
		mySecurityGroup,
	},
})

Adding Ec2 Instance as a target for the load balancer ​

You can add an EC2 instance to the load balancer by calling using new InstanceTarget as the argument to addTarget():

ts
declare const vpc: ec2.IVpc;
const lb = new elb.LoadBalancer(this, 'LB', {
  vpc,
  internetFacing: true,
});

// instance to add as the target for load balancer.
const instance = new ec2.Instance(this, 'targetInstance', {
  vpc: vpc,
  instanceType: ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.MICRO),
  machineImage: new ec2.AmazonLinuxImage({ generation: ec2.AmazonLinuxGeneration.AMAZON_LINUX_2 }),
});
lb.addTarget(new elb.InstanceTarget(instance));
python
# vpc: ec2.IVpc

lb = elb.LoadBalancer(self, "LB",
    vpc=vpc,
    internet_facing=True
)

# instance to add as the target for load balancer.
instance = ec2.Instance(self, "targetInstance",
    vpc=vpc,
    instance_type=ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.MICRO),
    machine_image=ec2.AmazonLinuxImage(generation=ec2.AmazonLinuxGeneration.AMAZON_LINUX_2)
)
lb.add_target(elb.InstanceTarget(instance))
java
IVpc vpc;

LoadBalancer lb = LoadBalancer.Builder.create(this, "LB")
        .vpc(vpc)
        .internetFacing(true)
        .build();

// instance to add as the target for load balancer.
Instance instance = Instance.Builder.create(this, "targetInstance")
        .vpc(vpc)
        .instanceType(InstanceType.of(InstanceClass.BURSTABLE2, InstanceSize.MICRO))
        .machineImage(AmazonLinuxImage.Builder.create().generation(AmazonLinuxGeneration.AMAZON_LINUX_2).build())
        .build();
lb.addTarget(new InstanceTarget(instance));
csharp
IVpc vpc;

var lb = new LoadBalancer(this, "LB", new LoadBalancerProps {
    Vpc = vpc,
    InternetFacing = true
});

// instance to add as the target for load balancer.
var instance = new Instance(this, "targetInstance", new InstanceProps {
    Vpc = vpc,
    InstanceType = InstanceType.Of(InstanceClass.BURSTABLE2, InstanceSize.MICRO),
    MachineImage = new AmazonLinuxImage(new AmazonLinuxImageProps { Generation = AmazonLinuxGeneration.AMAZON_LINUX_2 })
});
lb.AddTarget(new InstanceTarget(instance));
go
var vpc IVpc

lb := elb.NewLoadBalancer(this, jsii.String("LB"), &LoadBalancerProps{
	Vpc: Vpc,
	InternetFacing: jsii.Boolean(true),
})

// instance to add as the target for load balancer.
instance := ec2.NewInstance(this, jsii.String("targetInstance"), &InstanceProps{
	Vpc: vpc,
	InstanceType: ec2.InstanceType_Of(ec2.InstanceClass_BURSTABLE2, ec2.InstanceSize_MICRO),
	MachineImage: ec2.NewAmazonLinuxImage(&AmazonLinuxImageProps{
		Generation: ec2.AmazonLinuxGeneration_AMAZON_LINUX_2,
	}),
})
lb.AddTarget(elb.NewInstanceTarget(instance))

Types ​

NameKindSummary
LoadBalancerConstruct (L2)A load balancer with a single listener.
CfnLoadBalancerConstruct (L1)Specifies a Classic Load Balancer.
CfnLoadBalancer.AccessLoggingPolicyPropertyStructSpecifies where and how access logs are stored for your Classic Load Balancer.
CfnLoadBalancer.AppCookieStickinessPolicyPropertyStructSpecifies a policy for application-controlled session stickiness for your Classic Load Balancer.
CfnLoadBalancer.ConnectionDrainingPolicyPropertyStructSpecifies the connection draining settings for your Classic Load Balancer.
CfnLoadBalancer.ConnectionSettingsPropertyStructSpecifies the idle timeout value for your Classic Load Balancer.
CfnLoadBalancer.HealthCheckPropertyStructSpecifies health check settings for your Classic Load Balancer.
CfnLoadBalancer.LBCookieStickinessPolicyPropertyStructSpecifies a policy for duration-based session stickiness for your Classic Load Balancer.
CfnLoadBalancer.ListenersPropertyStructSpecifies a listener for your Classic Load Balancer.
CfnLoadBalancer.PoliciesPropertyStructSpecifies policies for your Classic Load Balancer.
CfnLoadBalancer.SourceSecurityGroupPropertyStruct
CfnLoadBalancerPropsStructProperties for defining a CfnLoadBalancer.
HealthCheckStructDescribe the health check to a load balancer.
ILoadBalancerInterfaceRepresents a load balancer.
ILoadBalancerTargetInterfaceInterface that is going to be implemented by constructs that you can load balance to.
InstanceTargetClassAn EC2 instance that is the target for load balancing.
ListenerPortClassReference to a listener's port just created.
LoadBalancerListenerStructAdd a backend to the load balancer.
LoadBalancerPropsStructConstruction properties for a LoadBalancer.
LoadBalancingProtocolEnum