Skip to main content

AWS CDK package that creates a highly opinionated application load balancer.

Project description

AWS ALB (Application Load Balancer)

An abstract application loadbalancer construct. It creates a loadbalancer and default security groups and listeners for the loadbalancer. Also, this loadbalancer is ready for blue-green deployments.

Remarks

The project is written by Laimonas Sutkus and is owned by iDenfy. This is an open source library intended to be used by anyone. iDenfy aims to share its knowledge and educate market for better and more secure IT infrastructure.

Related technology

This project utilizes the following technology:

  • AWS (Amazon Web Services).
  • AWS CDK (Amazon Web Services Cloud Development Kit).
  • AWS CloudFormation.
  • AWS Loadbalancer.
  • AWS Security groups.

Assumptions

This library project assumes the following:

  • You have knowledge in AWS (Amazon Web Services).
  • You have knowledge in AWS CloudFormation and AWS loadbalancing.
  • You are managing your infrastructure with AWS CDK.
  • You are writing AWS CDK templates with a python language.

Install

The project is built and uploaded to PyPi. Install it by using pip.

pip install aws-alb

Or directly install it through source.

./build.sh -ic

Description

It is usually hard to create a loadbalancer following best practices and rules. Also, most of the time the deployed loadbalancer will lack some configuration functionality for deployment management. We tackle these problems by providing you a library to easily deploy and maintain a loadbalancer with right security groups, right listeners and most importantly right configuration for blue-green deployments.

Examples

To create an application loadbalancer create an ApplicationLoadbalancer instance in your stack. An example is given below:

from aws_cdk import core, aws_ec2
from aws_alb.application_loadbalancer import ApplicationLoadbalancer

class MainStack(core.Stack):
    def __init__(self, scope: core.App) -> None:
        super().__init__(
            scope=scope,
            id='MyCoolStack'
        )

        # Create your own vpc.
        self.vpc = aws_ec2.Vpc(
            self,
            'MyCoolVpc'
        )

        self.public_http_loadbalancer = ApplicationLoadbalancer(
            scope=self,
            prefix='MyCool',
            vpc=self.vpc,
            loadbalancer_subnets=self.vpc.public_subnets,
            security_groups=None,
        )

To create listeners and target groups that are blue-green deployments ready:

from aws_alb.params.listener_params import ListenerParams
from aws_alb.params.target_group_params import TargetGroupParams
from aws_alb.application_loadbalancer import ApplicationLoadbalancer
from aws_cdk.aws_ec2 import Vpc

loadbalancer = ApplicationLoadbalancer(...)
vpc = Vpc(...)

blue, green = loadbalancer.listeners.create_blue_green(
    blue_listener_params=ListenerParams(
        prefix='MyCool',
        loadbalancer=loadbalancer,
        port=80
    ),
    green_listener_params=ListenerParams(
        prefix='MyCool',
        loadbalancer=loadbalancer.loadbalancer,
        port=8000
    ),
    blue_target_group_params=TargetGroupParams(
        prefix='MyCool',
        vpc=vpc,
    ),
    green_target_group_params=TargetGroupParams(
        prefix='MyCool',
        vpc=vpc,
    )
)

# If you need, you can access created target groups and listeners.
blue_target_group, blue_listener = blue
green_target_group, green_listener = green

# To see to which ports listeners are listening to:
print(blue_listener.port)
print(green_listener.port)

Usually, it is the best practice to have one loadbalancer with two (http and https) listeners and have listener rules to route traffic. To create default listeners:

from aws_alb.application_loadbalancer import ApplicationLoadbalancer
from aws_cdk.aws_certificatemanager import CfnCertificate
from aws_cdk.aws_ec2 import Vpc

loadbalancer = ApplicationLoadbalancer(...)
vpc = Vpc(...)
cert = CfnCertificate(...)

blue, green = loadbalancer.listeners.create_default_listeners(
    prefix='MyCool',
    loadbalancer=loadbalancer.loadbalancer,
    certificate=cert
)

print(blue.port) # Should be 443.
print(green.port) # Should be 44300.

Release history

4.2.0

Force CDK version update to 1.44.0.

4.1.1

Bug fixes.

4.1.0

Add ability to specify inbound and outbound traffic.

4.0.1

Bug fixes.

4.0.0

Bug fixes and even prettier and more convenient code.

3.0.0

Better blue-green integration. Support for default blue-green listeners.

2.0.1

Readme update.

2.0.0

Complete refactor. Instead of creating default listeners add an ability to create custom listeners and target groups. The loadbalancer now exposes an explicit method to easily create a pair of listeners and a pair of target groups for easy out-of-the-box blue/green deployment configuration.

1.0.2

Renames.

1.0.1

Bug fix.

1.0.0

Initial project.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aws_alb-4.2.0.tar.gz (10.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aws_alb-4.2.0-py3-none-any.whl (24.7 kB view details)

Uploaded Python 3

File details

Details for the file aws_alb-4.2.0.tar.gz.

File metadata

  • Download URL: aws_alb-4.2.0.tar.gz
  • Upload date:
  • Size: 10.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.6.8

File hashes

Hashes for aws_alb-4.2.0.tar.gz
Algorithm Hash digest
SHA256 3236a0be8b1a98be19af046c68425e58fb6a55ea7d469b1577cf966712b7a785
MD5 20832dc55957def897787c43111fe67e
BLAKE2b-256 2f45b5e8592ef125b20a514b92279240f1b1e51f7c1358bcf2633709948ba0b1

See more details on using hashes here.

File details

Details for the file aws_alb-4.2.0-py3-none-any.whl.

File metadata

  • Download URL: aws_alb-4.2.0-py3-none-any.whl
  • Upload date:
  • Size: 24.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.6.8

File hashes

Hashes for aws_alb-4.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3376e3739ba6ba93219fd985ee17f45301d01dfad23e0bbd20360f2a72d2ab3c
MD5 275e8e15c953c695d08d624311d44d78
BLAKE2b-256 97d99e40bf92409d54043a8cfa2a97b88a65d3c0f4ff15d95b1d8eb2fca6fb79

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page