CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-pulumi--aws

A Pulumi package for creating and managing Amazon Web Services (AWS) cloud resources with infrastructure-as-code.

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

lb.mddocs/networking/

Load Balancers - Application and Network LB

Elastic Load Balancing distributes incoming traffic across multiple targets.

Common Tasks

Create Application Load Balancer with HTTP listener

const alb = new aws.lb.LoadBalancer("app-lb", {
    loadBalancerType: "application",
    subnets: [subnet1.id, subnet2.id],
    securityGroups: [sg.id],
});
const targetGroup = new aws.lb.TargetGroup("tg", {
    port: 80,
    protocol: "HTTP",
    vpcId: vpc.id,
});
const listener = new aws.lb.Listener("http", {
    loadBalancerArn: alb.arn,
    port: 80,
    defaultActions: [{ type: "forward", targetGroupArn: targetGroup.arn }],
});

Set up HTTPS listener with SSL certificate

const httpsListener = new aws.lb.Listener("https", {
    loadBalancerArn: alb.arn,
    port: 443,
    protocol: "HTTPS",
    certificateArn: cert.arn,
    defaultActions: [{ type: "forward", targetGroupArn: targetGroup.arn }],
});

Create Network Load Balancer for TCP traffic

const nlb = new aws.lb.LoadBalancer("net-lb", {
    loadBalancerType: "network",
    subnets: [subnet1.id, subnet2.id],
    internal: false,
});
const tcpTarget = new aws.lb.TargetGroup("tcp-tg", {
    port: 3306,
    protocol: "TCP",
    vpcId: vpc.id,
});

Core Resources

LoadBalancer

class LoadBalancer extends pulumi.CustomResource {
    constructor(name: string, args?: LoadBalancerArgs, opts?: pulumi.CustomResourceOptions);

    readonly arn: pulumi.Output<string>;
    readonly dnsName: pulumi.Output<string>;
}

interface LoadBalancerArgs {
    name?: pulumi.Input<string>;
    loadBalancerType?: pulumi.Input<"application" | "network" | "gateway">;
    internal?: pulumi.Input<boolean>;
    subnets?: pulumi.Input<pulumi.Input<string>[]>;
    securityGroups?: pulumi.Input<pulumi.Input<string>[]>;
    enableDeletionProtection?: pulumi.Input<boolean>;
    tags?: pulumi.Input<{[key: string]: pulumi.Input<string>}>;
}

Example: Create an Application Load Balancer

const alb = new aws.lb.LoadBalancer("app-lb", {
    name: "my-alb",
    loadBalancerType: "application",
    internal: false,
    subnets: [publicSubnet1.id, publicSubnet2.id],
    securityGroups: [lbSecurityGroup.id],
    tags: { Environment: "production" },
});

TargetGroup

class TargetGroup extends pulumi.CustomResource {
    constructor(name: string, args?: TargetGroupArgs, opts?: pulumi.CustomResourceOptions);
}

interface TargetGroupArgs {
    port?: pulumi.Input<number>;
    protocol?: pulumi.Input<"HTTP" | "HTTPS" | "TCP" | "TLS" | "UDP" | "TCP_UDP">;
    vpcId?: pulumi.Input<string>;
    targetType?: pulumi.Input<"instance" | "ip" | "lambda">;
    healthCheck?: pulumi.Input<TargetGroupHealthCheck>;
}

interface TargetGroupHealthCheck {
    enabled?: pulumi.Input<boolean>;
    path?: pulumi.Input<string>;
    port?: pulumi.Input<string | number>;
    protocol?: pulumi.Input<"HTTP" | "HTTPS" | "TCP" | "TLS">;
    healthyThreshold?: pulumi.Input<number>;
    unhealthyThreshold?: pulumi.Input<number>;
    timeout?: pulumi.Input<number>;
    interval?: pulumi.Input<number>;
    matcher?: pulumi.Input<string>;
}

Example: Create target group with health checks

const targetGroup = new aws.lb.TargetGroup("app-tg", {
    port: 80,
    protocol: "HTTP",
    vpcId: vpc.id,
    targetType: "instance",
    healthCheck: {
        enabled: true,
        path: "/health",
        port: "traffic-port",
        protocol: "HTTP",
        healthyThreshold: 2,
        unhealthyThreshold: 2,
        timeout: 5,
        interval: 30,
        matcher: "200",
    },
});

Listener

class Listener extends pulumi.CustomResource {
    constructor(name: string, args: ListenerArgs, opts?: pulumi.CustomResourceOptions);
}

interface ListenerArgs {
    loadBalancerArn: pulumi.Input<string>;
    port?: pulumi.Input<number>;
    protocol?: pulumi.Input<"HTTP" | "HTTPS" | "TCP" | "TLS" | "UDP" | "TCP_UDP">;
    defaultActions: pulumi.Input<pulumi.Input<ListenerDefaultAction>[]>;
    certificateArn?: pulumi.Input<string>;
}

interface ListenerDefaultAction {
    type: pulumi.Input<"forward" | "redirect" | "fixed-response" | "authenticate-cognito" | "authenticate-oidc">;
    targetGroupArn?: pulumi.Input<string>;
    redirect?: pulumi.Input<{
        statusCode: pulumi.Input<"HTTP_301" | "HTTP_302">;
        protocol?: pulumi.Input<string>;
        host?: pulumi.Input<string>;
        port?: pulumi.Input<string>;
        path?: pulumi.Input<string>;
        query?: pulumi.Input<string>;
    }>;
    fixedResponse?: pulumi.Input<{
        statusCode: pulumi.Input<string>;
        contentType?: pulumi.Input<string>;
        messageBody?: pulumi.Input<string>;
    }>;
    authenticateCognito?: pulumi.Input<{
        userPoolArn: pulumi.Input<string>;
        userPoolClientId: pulumi.Input<string>;
        userPoolDomain: pulumi.Input<string>;
    }>;
    order?: pulumi.Input<number>;
}

Example: Create listener with multiple actions

// HTTP to HTTPS redirect
const httpListener = new aws.lb.Listener("http", {
    loadBalancerArn: alb.arn,
    port: 80,
    protocol: "HTTP",
    defaultActions: [{
        type: "redirect",
        redirect: {
            statusCode: "HTTP_301",
            protocol: "HTTPS",
            port: "443",
        },
    }],
});

// HTTPS listener with forwarding
const httpsListener = new aws.lb.Listener("https", {
    loadBalancerArn: alb.arn,
    port: 443,
    protocol: "HTTPS",
    certificateArn: cert.arn,
    defaultActions: [{
        type: "forward",
        targetGroupArn: targetGroup.arn,
    }],
});

For complete load balancer API, see All Services and All Services.

Related Services

  • EC2 - Register EC2 instances as targets
  • ECS - Load balancing for container services
  • Lambda - Target Lambda functions directly
  • Route 53 - DNS alias records to load balancers
  • ACM - SSL/TLS certificates for HTTPS listeners
  • WAF - Web application firewall for ALB

Install with Tessl CLI

npx tessl i tessl/npm-pulumi--aws@7.16.0

docs

index.md

quickstart.md

README.md

tile.json