export default()

in src/js/helpers/awsalb.js [1:145]


export default (form, output) => {
    var hsts = '';

 if (form.hsts) {
    hsts =
`
  # ${form.serverName} doesn't support HSTS, but it can redirect to HTTPS
  ExampleALBHTTPToHTTPSRedirect:
    Type: AWS::ElasticLoadBalancingV2::Listener
    DependsOn: ExampleALB
    Properties:
      DefaultActions:
        - RedirectConfig:
            Host: "#{host}"
            Path: "/#{path}"
            Port: 443
            Protocol: "HTTPS"
            Query: "#{query}"
            StatusCode: HTTP_${output.hstsRedirectCode}
          Type: redirect
      LoadBalancerArn: !Ref ExampleALB
      Port: 80
      Protocol: HTTP
`;
 }

    var sslpolicy = output.protocols.includes('TLSv1')
      ? 'ELBSecurityPolicy-TLS-1-0-2015-04'
      : output.protocols.includes('TLSv1.2')
        ? 'ELBSecurityPolicy-TLS13-1-2-Res-2021-06'
        : 'ELBSecurityPolicy-TLS13-1-3-2021-06';

    var conf =
`# Please note that Application Load Balancers don't allow you to directly specify protocols
# and ciphers, so this is the closest existing mapping from the Mozilla ${form.config}
# profile onto an existing Amazon SSL Security Policy. For additional information, please see:
# https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html#describe-ssl-policies
AWSTemplateFormatVersion: 2010-09-09
Description: Mozilla ALB configuration generated ${output.date}, ${output.link}
Parameters:
  SSLCertificateId:
    Description: The ARN of the ACM SSL certificate to use
    Type: String
    AllowedPattern: ^arn:aws:acm:[^:]*:[^:]*:certificate/.*$
    ConstraintDescription: >
      SSL Certificate ID must be a valid ACM ARN.
      https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#genref-arns
Resources:
  ExampleALB:
    Type: AWS::ElasticLoadBalancingV2::LoadBalancer
    DependsOn: ExampleVPCGatewayAttachment
    Properties:
      SecurityGroups:
        - !Ref ExampleSecurityGroup
      Subnets:
        - !Ref ExampleSubnet1
        - !Ref ExampleSubnet2
  ExampleALBListener:
    Type: AWS::ElasticLoadBalancingV2::Listener
    Properties:
      Certificates:
        - CertificateArn: !Ref SSLCertificateId
      DefaultActions:
        # For simplicity, this example doesn't send traffic to a backend EC2 instance
        # or Lambda function and instead just returns a static page. To change this
        # to use a real backend, use the "forward" action type in DefaultActions and
        # provision a "AWS::ElasticLoadBalancingV2::TargetGroup" resource
        - FixedResponseConfig:
            ContentType: text/html
            MessageBody: You've reached your ${form.serverName}
            StatusCode: '200'
          Type: fixed-response
      LoadBalancerArn: !Ref ExampleALB
      Port: 443
      Protocol: HTTPS
      SslPolicy: ${sslpolicy}
${hsts}
  # Everything that follows is the infrastructure to enable an AWS ALB to be provisioned
  # If you have pre-existing resources like a VPC, subnets, route tables, etc you don't
  # need to provision these and instead you can merely reference them above.
  ExampleVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 172.28.200.0/24
  ExampleIGW:
    Type: AWS::EC2::InternetGateway
  ExampleVPCGatewayAttachment:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      InternetGatewayId: !Ref ExampleIGW
      VpcId: !Ref ExampleVPC
  ExampleRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref ExampleVPC
  ExampleRoute:
    Type: AWS::EC2::Route
    DependsOn: ExampleVPCGatewayAttachment
    Properties:
      RouteTableId: !Ref ExampleRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref ExampleIGW
  ExampleSubnet1:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 172.28.200.0/25
      AvailabilityZone: !Select
        - 0
        - Fn::GetAZs: !Ref 'AWS::Region'
      VpcId: !Ref ExampleVPC
  ExampleSubnet2:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 172.28.200.128/25
      AvailabilityZone: !Select
        - 1
        - Fn::GetAZs: !Ref 'AWS::Region'
      VpcId: !Ref ExampleVPC
  ExampleSubnet1RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref ExampleSubnet1
      RouteTableId: !Ref ExampleRouteTable
  ExampleSubnet2RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref ExampleSubnet2
      RouteTableId: !Ref ExampleRouteTable
  ExampleSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Allow inbound traffic from the internet
      SecurityGroupIngress:
        - CidrIp: 0.0.0.0/0
          IpProtocol: '-1'
      VpcId: !Ref ExampleVPC

Outputs:
  ALBURL:
    Description: URL of the ALB load balancer
    Value: !Join [ '', [ 'https://', !GetAtt 'ExampleALB.DNSName', '/' ] ]
`;

  return conf;
};