A Pulumi package for creating and managing Amazon Web Services (AWS) cloud resources with infrastructure-as-code.
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Elastic Load Balancing distributes incoming traffic across multiple targets.
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,
});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" },
});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",
},
});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.
Install with Tessl CLI
npx tessl i tessl/npm-pulumi--aws@7.16.0