Description: > This template deploys an Application Load Balancer that exposes our various ECS services. We create them in a seperate nested template, so it can be referenced by all of the other nested templates. Parameters: EnvironmentName: Description: An environment name that will be prefixed to resource names Type: String VPC: Type: AWS::EC2::VPC::Id Description: Choose which VPC the Application Load Balancer should be deployed to Subnets: Description: Choose which subnets the Application Load Balancer should be deployed to Type: List SecurityGroup: Description: Select the Security Group to apply to the Application Load Balancer Type: AWS::EC2::SecurityGroup::Id Resources: LoadBalancer: Type: AWS::ElasticLoadBalancingV2::LoadBalancer Properties: Name: !Ref EnvironmentName Subnets: !Ref Subnets SecurityGroups: - !Ref SecurityGroup Tags: - Key: Name Value: !Ref EnvironmentName LoadBalancerListener: Type: AWS::ElasticLoadBalancingV2::Listener Properties: LoadBalancerArn: !Ref LoadBalancer Port: 80 Protocol: HTTP DefaultActions: - Type: forward TargetGroupArn: !Ref DefaultTargetGroup # We define a default target group here, as this is a mandatory Parameters # when creating an Application Load Balancer Listener. This is not used, instead # a target group is created per-service in each service template (../services/*) DefaultTargetGroup: Type: AWS::ElasticLoadBalancingV2::TargetGroup Properties: Name: !Sub ${EnvironmentName}-default VpcId: !Ref VPC Port: 80 Protocol: HTTP Outputs: LoadBalancer: Description: A reference to the Application Load Balancer Value: !Ref LoadBalancer LoadBalancerUrl: Description: The URL of the ALB Value: !GetAtt LoadBalancer.DNSName Listener: Description: A reference to a port 80 listener Value: !Ref LoadBalancerListener