Parameters:
EnvironmentName:
Description: An environment name that is prefixed to resource names
Type: String
Default: "wsi"
Resources:
ALBSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: !Sub "${EnvironmentName}-alb-sg"
VpcId: !Ref MainVPC
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
SecurityGroupEgress:
- IpProtocol: -1
FromPort: 0
ToPort: 0
CidrIp: 0.0.0.0/0
Tags:
- Key: Name
Value: !Sub "${EnvironmentName}-alb-sg"
ApplicationLoadBalancer:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
Name: !Sub "${EnvironmentName}-alb"
Scheme: internet-facing
Type: application
SecurityGroups:
- !Ref ALBSecurityGroup
Subnets:
- !Ref PublicSubnet1
- !Ref PublicSubnet2
- !Ref PublicSubnet3
Tags:
- Key: Name
Value: !Sub "${EnvironmentName}-alb"
ALBTargetGroup:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
Name: !Sub "${EnvironmentName}-tg"
Port: 80
Protocol: HTTP
VpcId: !Ref MainVPC
TargetType: instance
HealthCheckPath: /health
HealthCheckProtocol: HTTP
HealthCheckIntervalSeconds: 30
HealthyThresholdCount: 2
UnhealthyThresholdCount: 2
HealthCheckTimeoutSeconds: 5
Tags:
- Key: Name
Value: !Sub "${EnvironmentName}-tg"
ALBListener:
Type: AWS::ElasticLoadBalancingV2::Listener
Properties:
LoadBalancerArn: !Ref ApplicationLoadBalancer
Port: 80
Protocol: HTTP
DefaultActions:
- Type: forward
TargetGroupArn: !Ref ALBTargetGroup
ALBTargetGroupAttachment:
Type: AWS::ElasticLoadBalancingV2::TargetGroupAttachment
Properties:
TargetGroupArn: !Ref ALBTargetGroup
TargetId: !Ref EC2Instance
Port: 80
Outputs:
ALBSecurityGroupId:
Description: ALB Security Group ID
Value: !Ref ALBSecurityGroup
ALBId:
Description: Application Load Balancer ID
Value: !Ref ApplicationLoadBalancer