MicroStack
↑↓ navigate ↵ select esc close
GitHub

ALB (ELBv2)

MicroStack's ALB handler emulates the Elastic Load Balancing v2 API — Application and Network Load Balancers, target groups, listeners, rules, and target health. ALB-to-Lambda live traffic routing is supported.

Supported Operations

Load Balancers

  • CreateLoadBalancer, DescribeLoadBalancers, DeleteLoadBalancer
  • DescribeLoadBalancerAttributes, ModifyLoadBalancerAttributes
  • SetSecurityGroups, SetSubnets

Target Groups

  • CreateTargetGroup, DescribeTargetGroups, ModifyTargetGroup, DeleteTargetGroup
  • DescribeTargetGroupAttributes, ModifyTargetGroupAttributes
  • RegisterTargets, DeregisterTargets, DescribeTargetHealth

Listeners

  • CreateListener, DescribeListeners, ModifyListener, DeleteListener

Rules

  • CreateRule, DescribeRules, ModifyRule, DeleteRule, SetRulePriorities

Tags

  • AddTags, RemoveTags, DescribeTags

Usage

var elb = new AmazonElasticLoadBalancingV2Client(
new BasicAWSCredentials("test", "test"),
new AmazonElasticLoadBalancingV2Config { ServiceURL = "http://localhost:4566" });
// Create a load balancer
var lb = await elb.CreateLoadBalancerAsync(new CreateLoadBalancerRequest
{
Name = "my-alb",
Type = LoadBalancerTypeEnum.Application,
Scheme = LoadBalancerSchemeEnum.InternetFacing,
});
var lbArn = lb.LoadBalancers[0].LoadBalancerArn;
Console.WriteLine(lb.LoadBalancers[0].DNSName); // synthetic DNS name
// Create a target group
var tg = await elb.CreateTargetGroupAsync(new CreateTargetGroupRequest
{
Name = "my-targets",
Protocol = ProtocolEnum.HTTP,
Port = 80,
VpcId = "vpc-00000001",
HealthCheckPath = "/health",
});
var tgArn = tg.TargetGroups[0].TargetGroupArn;
// Create a listener
var listener = await elb.CreateListenerAsync(new CreateListenerRequest
{
LoadBalancerArn = lbArn,
Protocol = ProtocolEnum.HTTP,
Port = 80,
DefaultActions =
[
new Action
{
Type = ActionTypeEnum.Forward,
TargetGroupArn = tgArn,
},
],
});

Listener Rules

// Add a path-based routing rule
await elb.CreateRuleAsync(new CreateRuleRequest
{
ListenerArn = listener.Listeners[0].ListenerArn,
Priority = 10,
Conditions =
[
new RuleCondition
{
Field = "path-pattern",
Values = ["/api/*"],
},
],
Actions =
[
new Action
{
Type = ActionTypeEnum.Forward,
TargetGroupArn = tgArn,
},
],
});