Skip to content

Instantly share code, notes, and snippets.

@hrizvi
Forked from anabadce/alb-redirect-only.yaml
Created November 24, 2020 18:35
Show Gist options
  • Save hrizvi/fc3102ff024b3eb33b5f3dc2bcb4c8f2 to your computer and use it in GitHub Desktop.
Save hrizvi/fc3102ff024b3eb33b5f3dc2bcb4c8f2 to your computer and use it in GitHub Desktop.

Revisions

  1. @anabadce anabadce created this gist Mar 21, 2019.
    134 changes: 134 additions & 0 deletions alb-redirect-only.yaml
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,134 @@
    AWSTemplateFormatVersion: '2010-09-09'
    Description: 'ALB Application Load Balancer for redirection only'

    Parameters:
    MyALBName:
    Type: 'String'
    Default: 'alb-redirect'
    VPC:
    Type: 'AWS::EC2::VPC::Id'
    Default: 'vpc-********'
    ALBSubnetList:
    Type: 'List<AWS::EC2::Subnet::Id>'
    Default: 'subnet-********,subnet-********'
    ALBExistingCertArn:
    Type: 'String'
    Default: 'arn:aws:acm:<my-region>:<my-account>:certificate/********-****-****-****-********'
    DestinationHost:
    Type: 'String'
    Default: 'www.example.com'

    Resources:
    ALBInstance:
    Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
    Properties:
    LoadBalancerAttributes:
    - Key: 'deletion_protection.enabled'
    Value: True
    - Key: 'access_logs.s3.enabled'
    Value: False
    Name: !Sub 'alb-${MyALBName}'
    Scheme: 'internet-facing'
    Subnets: !Ref 'ALBSubnetList'
    SecurityGroups:
    - !Ref 'ALBSecurityGroup'

    ALBListenerSSL:
    Type: 'AWS::ElasticLoadBalancingV2::Listener'
    Properties:
    DefaultActions:
    - RedirectConfig:
    Host: !Ref DestinationHost
    Path: "/#{path}"
    Port: 443
    Protocol: "HTTPS"
    Query: "#{query}"
    StatusCode: HTTP_301
    Type: "redirect"
    Certificates:
    - CertificateArn: !Ref ALBExistingCertArn
    LoadBalancerArn: !Ref 'ALBInstance'
    Port: 443
    Protocol: 'HTTPS'

    ALBListenerSSLRule1:
    Type: AWS::ElasticLoadBalancingV2::ListenerRule
    Properties:
    Actions:
    - RedirectConfig:
    Host: !Ref DestinationHost
    Path: "/contact/"
    Port: 443
    Protocol: "HTTPS"
    Query: "#{query}"
    StatusCode: HTTP_301
    Type: "redirect"
    Conditions:
    - Field: path-pattern
    Values:
    - "/contact-2/"
    ListenerArn:
    Ref: ALBListenerSSL
    Priority: 1

    ALBListenerSSLRule2:
    Type: AWS::ElasticLoadBalancingV2::ListenerRule
    Properties:
    Actions:
    - RedirectConfig:
    Host: !Ref DestinationHost
    Path: "/new-path-example/"
    Port: 443
    Protocol: "HTTPS"
    Query: "#{query}"
    StatusCode: HTTP_301
    Type: "redirect"
    Conditions:
    - Field: path-pattern
    Values:
    - "/old-path-example/"
    ListenerArn:
    Ref: ALBListenerSSL
    Priority: 2

    ALBListener:
    Type: 'AWS::ElasticLoadBalancingV2::Listener'
    Properties:
    DefaultActions:
    - RedirectConfig:
    Host: !Ref DestinationHost
    Path: "/#{path}"
    Port: 443
    Protocol: "HTTPS"
    Query: "#{query}"
    StatusCode: HTTP_301
    Type: "redirect"
    LoadBalancerArn: !Ref 'ALBInstance'
    Port: 80
    Protocol: 'HTTP'

    ALBSecurityGroup:
    Type: "AWS::EC2::SecurityGroup"
    Properties:
    GroupDescription: "Allow incoming from anywhere to HTTPS and HTTP"
    SecurityGroupIngress:
    - CidrIp: "0.0.0.0/0"
    FromPort: 80
    IpProtocol: "tcp"
    ToPort: 80
    - CidrIp: "0.0.0.0/0"
    FromPort: 443
    IpProtocol: "tcp"
    ToPort: 443
    Tags:
    - Key: "Used by"
    Value: !Ref "MyALBName"
    VpcId: !Ref "VPC"

    Outputs:
    ALBEndpoint:
    Value: !GetAtt 'ALBInstance.DNSName'
    Description: 'LoadBalancer DNS name'
    ALBName:
    Value: !GetAtt 'ALBInstance.LoadBalancerName'
    Description: 'Unique load balancer name'