AWS Elastic Load Balancing V2 Deployment with CloudFormation: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
No edit summary
 
(60 intermediate revisions by the same user not shown)
Line 1: Line 1:
=External=
=External=


* [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-reference-elasticloadbalancingv2.html Elastic Load Balancing V2 Resource Types Reference]
* [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ElasticLoadBalancingV2.html Elastic Load Balancing V2 Resource Types Reference]


=Internal=
=Internal=


* [[AWS_CloudFormation_Resource_Types#AWS::ElasticLoadBalancingV2|CloudFormation Resource Types]]
* [[AWS_CloudFormation_Resource_Types#AWS::ElasticLoadBalancingV2|CloudFormation Resource Types]]
* [[AWS_Elastic_Load_Balancing_Operations#Elastic_Load_Balancing_V2_Deployment_with_CloudFormation|Elastic Load Balancing Operations]]
* [[AWS Elastic Load Balancing Concepts|Elastic Load Balancing Concepts]]


=AWS::ElasticLoadBalancingV2::TargetGroup=
=Resource Types=
 
==AWS::ElasticLoadBalancingV2::LoadBalancer==
 
{{External|[https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html AWS::ElasticLoadBalancingV2::LoadBalancer]}}
 
Resources:
  ALoadBalancer:
    Type: AWS::ElasticLoadBalancingV2::LoadBalancer
    Properties:
      [[AWS_Elastic_Load_Balancing_Concepts#Load_Balancer_Name|Name]]: blue
      [[AWS_Elastic_Load_Balancing_Concepts#Load_Balancer_Scheme|Scheme]]: '[[AWS_Elastic_Load_Balancing_Concepts#Internet-Facing|internet-facing]]'|'[[AWS_Elastic_Load_Balancing_Concepts#Internal_2|internal]]'
      [[AWS_Elastic_Load_Balancing_Concepts#Load_Balancer_Types|Type]]: '[[AWS_Elastic_Load_Balancing_Concepts#Application_Load_Balancer|application]]'|'[[AWS_Elastic_Load_Balancing_Concepts#Network_Load_Balancer|network]]'
      [[AWS_Elastic_Load_Balancing_Concepts#IP_Address_Type|IpAddressType]]: 'ipv4'
      [[AWS_Elastic_Load_Balancing_Concepts#Common_Load_Balancer_Configuration|LoadBalancerAttributes]]:
        - Key: '[[AWS_Elastic_Load_Balancing_Concepts#access_logs.s3.enabled|access_logs.s3.enabled]]'
          Value: true|false
        - Key: '[[AWS_Elastic_Load_Balancing_Concepts#access_logs.s3.bucket|access_logs.s3.bucket]]'
          Value: ...
        - Key: '[[AWS_Elastic_Load_Balancing_Concepts#access_logs.s3.prefix|access_logs.s3.prefix]]'
          Value: ...
      [[AWS_Elastic_Load_Balancing_Concepts#Subnet_Mapping|Subnets]]:
        - blue-subnet-id
        - red-subnet-id
      [[AWS_Elastic_Load_Balancing_Concepts#Subnet_Mapping|SubnetMappings]]:
        - ...
      [[AWS_Elastic_Load_Balancing_Concepts#Application_Load_Balancer_and_Security_Groups|SecurityGroups]]:
        - some-security-group-for-application-load-balancer
 
===Create an Application Load Balancer===
 
<syntaxhighlight lang='yaml'>
Resources:
  InternalALB:
    Type: AWS::ElasticLoadBalancingV2::LoadBalancer
    Properties:
      Name: !Sub ${EnvironmentName}-alb
      Scheme: 'internal'
      Type: 'application'
      IpAddressType: 'ipv4'
      LoadBalancerAttributes:
        - Key: access_logs.s3.enabled
          Value: false
      Subnets:
        - !Ref BlueSubnet
        - !Ref RedSubnet
      SecurityGroups:
        - !Ref InternalALBSecurityGroup
</syntaxhighlight>
 
===Create a Network Load Balancer===
 
==AWS::ElasticLoadBalancingV2::TargetGroup==
 
===Network Load Balancer TargetGroup===
 
Resources:
  TargetGroup:
    Type: AWS::ElasticLoadBalancingV2::TargetGroup
    Properties:
      [[AWS_Elastic_Load_Balancing_Concepts#Target_Group_Name|Name]]: !Ref ProjectID
      [[AWS_Elastic_Load_Balancing_Concepts#Target_Group_VPC_Association|VpcId]]: !Ref VPCId
      [[AWS_Elastic_Load_Balancing_Concepts#Target_Group_Protocol|Protocol]]: TCP
      [[AWS_Elastic_Load_Balancing_Concepts#Target_Group_Port|Port]]: !Ref Port
      [[AWS_Elastic_Load_Balancing_Concepts#Target_Type|TargetType]]: ip
      [[AWS_Elastic_Load_Balancing_Concepts#Health_Check_Protocol|HealthCheckProtocol]]: TCP
      [[AWS_Elastic_Load_Balancing_Concepts#Health_Check_Interval|HealthCheckIntervalSeconds]]: 10
      [[AWS_Elastic_Load_Balancing_Concepts#Health_Check_Timeout|HealthCheckTimeoutSeconds]]: 10
      [[AWS_Elastic_Load_Balancing_Concepts#Healthy_Threshold_Count|HealthyThresholdCount]]: 3
      [[AWS_Elastic_Load_Balancing_Concepts#Unhealthy_Threshold_Count|UnhealthyThresholdCount]]: 3
 
===Application Load Balancer TargetGroup===


  Resources:
  Resources:
Line 13: Line 86:
     Type: AWS::ElasticLoadBalancingV2::TargetGroup
     Type: AWS::ElasticLoadBalancingV2::TargetGroup
     Properties:
     Properties:
       HealthCheckIntervalSeconds: 60
       [[AWS_Elastic_Load_Balancing_Concepts#Target_Group_Name|Name]]: !Ref ProjectID
       HealthCheckPath: '/myservice/actuator/health'
       [[AWS_Elastic_Load_Balancing_Concepts#Target_Group_VPC_Association|VpcId]]: !Ref VPCId
       HealthCheckProtocol: HTTP
       [[AWS_Elastic_Load_Balancing_Concepts#Target_Group_Protocol|Protocol]]: HTTP
       HealthCheckTimeoutSeconds: 5
       [[AWS_Elastic_Load_Balancing_Concepts#Target_Group_Port|Port]]: !Ref Port
       HealthyThresholdCount: 2
       [[AWS_Elastic_Load_Balancing_Concepts#Target_Type|TargetType]]: ip
       TargetType: ip
       [[AWS_Elastic_Load_Balancing_Concepts#Health_Check_Protocol|HealthCheckProtocol]]: HTTP
       Name: myservice
       [[AWS_Elastic_Load_Balancing_Concepts#Health_Check_Interval|HealthCheckIntervalSeconds]]: 60
       Port: 8086
       [[AWS_Elastic_Load_Balancing_Concepts#Health_Check_Timeout|HealthCheckTimeoutSeconds]]: 5
       Protocol: HTTP
       [[AWS_Elastic_Load_Balancing_Concepts#Healthy_Threshold_Count|HealthyThresholdCount]]: 2
       UnhealthyThresholdCount: 10
       [[AWS_Elastic_Load_Balancing_Concepts#Unhealthy_Threshold_Count|UnhealthyThresholdCount]]: 10
       VpcId: !Ref MyVpcId
       [[AWS_Elastic_Load_Balancing_Concepts#Health_Check_Path|HealthCheckPath]]: '/actuator/health'


==AWS::ElasticLoadBalancingV2::Listener==
==AWS::ElasticLoadBalancingV2::Listener==
===Network Load Balancer Listener===


  Resources:
  Resources:
   LoadBalancerListener:
   LoadBalancerListener:
     Type: AWS::ElasticLoadBalancingV2::Listener
     Type: AWS::ElasticLoadBalancingV2::Listener
    DependsOn:
      - TargetGroup
     Properties:
     Properties:
       DefaultActions:
       LoadBalancerArn: !Ref LoadBalancerArn
         - TargetGroupArn: !Ref 'TargetGroup'
      [[AWS_Elastic_Load_Balancing_Concepts#Listener_Port|Port]]: !Ref NetworkLoadBalancerPort
           Type: 'forward'
      [[AWS_Elastic_Load_Balancing_Concepts#Listener_Protocol|Protocol]]: TCP
      LoadBalancerArn:
      [[AWS_Elastic_Load_Balancing_Concepts#Default_Listener_Rule|DefaultActions]]:
        Fn::ImportValue: !Join [':', [!Ref 'DeploymentStackName', 'ServiceALB']]
         - TargetGroupArn: !Ref TargetGroup
      Port: 10002
           [[AWS_Elastic_Load_Balancing_Concepts#Action_Type|Type]]: 'forward'
      Protocol: HTTP
 
===Application Load Balancer Listener===
 
Resources:
  LoadBalancerListener:
    Type: AWS::ElasticLoadBalancingV2::Listener
    Properties:
      LoadBalancerArn: !Ref ApplicationkLoadBalancerArn
      [[AWS_Elastic_Load_Balancing_Concepts#Listener_Port|Port]]: !Ref LoadBalancerPort
      [[AWS_Elastic_Load_Balancing_Concepts#Listener_Protocol|Protocol]]: HTTP
      [[AWS_Elastic_Load_Balancing_Concepts#Default_Listener_Rule|DefaultActions]]:
        - TargetGroupArn: !Ref TargetGroup
          [[AWS_Elastic_Load_Balancing_Concepts#Action_Type|Type]]: 'forward'

Latest revision as of 16:41, 30 April 2019

External

Internal

Resource Types

AWS::ElasticLoadBalancingV2::LoadBalancer

AWS::ElasticLoadBalancingV2::LoadBalancer
Resources:
  ALoadBalancer:
    Type: AWS::ElasticLoadBalancingV2::LoadBalancer
    Properties:
      Name: blue
      Scheme: 'internet-facing'|'internal'
      Type: 'application'|'network'
      IpAddressType: 'ipv4'
      LoadBalancerAttributes:
        - Key: 'access_logs.s3.enabled'
          Value: true|false
        - Key: 'access_logs.s3.bucket'
          Value: ...
        - Key: 'access_logs.s3.prefix'
          Value: ...
      Subnets:
        - blue-subnet-id
        - red-subnet-id
      SubnetMappings:
        - ...
      SecurityGroups:
        - some-security-group-for-application-load-balancer

Create an Application Load Balancer

Resources:
  InternalALB:
    Type: AWS::ElasticLoadBalancingV2::LoadBalancer
    Properties:
      Name: !Sub ${EnvironmentName}-alb
      Scheme: 'internal'
      Type: 'application'
      IpAddressType: 'ipv4'
      LoadBalancerAttributes:
        - Key: access_logs.s3.enabled
          Value: false
      Subnets:
        - !Ref BlueSubnet
        - !Ref RedSubnet
      SecurityGroups:
        - !Ref InternalALBSecurityGroup

Create a Network Load Balancer

AWS::ElasticLoadBalancingV2::TargetGroup

Network Load Balancer TargetGroup

Resources:
  TargetGroup:
    Type: AWS::ElasticLoadBalancingV2::TargetGroup
    Properties:
      Name: !Ref ProjectID
      VpcId: !Ref VPCId
      Protocol: TCP
      Port: !Ref Port
      TargetType: ip
      HealthCheckProtocol: TCP
      HealthCheckIntervalSeconds: 10
      HealthCheckTimeoutSeconds: 10
      HealthyThresholdCount: 3
      UnhealthyThresholdCount: 3

Application Load Balancer TargetGroup

Resources:
 TargetGroup:
    Type: AWS::ElasticLoadBalancingV2::TargetGroup
    Properties:
      Name: !Ref ProjectID
      VpcId: !Ref VPCId
      Protocol: HTTP
      Port: !Ref Port
      TargetType: ip
      HealthCheckProtocol: HTTP
      HealthCheckIntervalSeconds: 60
      HealthCheckTimeoutSeconds: 5
      HealthyThresholdCount: 2
      UnhealthyThresholdCount: 10
      HealthCheckPath: '/actuator/health'

AWS::ElasticLoadBalancingV2::Listener

Network Load Balancer Listener

Resources:
  LoadBalancerListener:
    Type: AWS::ElasticLoadBalancingV2::Listener
    Properties:
      LoadBalancerArn: !Ref LoadBalancerArn
      Port: !Ref NetworkLoadBalancerPort
      Protocol: TCP
      DefaultActions:
        - TargetGroupArn: !Ref TargetGroup
          Type: 'forward'

Application Load Balancer Listener

Resources:
 LoadBalancerListener:
   Type: AWS::ElasticLoadBalancingV2::Listener
   Properties:
     LoadBalancerArn: !Ref ApplicationkLoadBalancerArn
     Port: !Ref LoadBalancerPort
     Protocol: HTTP
     DefaultActions:
       - TargetGroupArn: !Ref TargetGroup
         Type: 'forward'