【问题标题】:AWS CloudFormation stack: add load balancer listener based on conditionAWS CloudFormation 堆栈:根据条件添加负载均衡器侦听器
【发布时间】:2019-03-06 01:34:19
【问题描述】:

我正在尝试使用 CloudFormation 来构建负载均衡器侦听器列表,并将可选参数 TCPPort1 设置为侦听器(如果已设置该值)。

我在其他地方使用过Condition,但如果我在侦听器级别使用它,我会收到错误: The following resource(s) failed to create: [LoadBalancer]. . Rollback requested by user. Encountered unsupported property Condition

LoadBalancer:
    Type: 'AWS::ElasticLoadBalancing::LoadBalancer'
    Properties:
      HealthCheck:
        HealthyThreshold: '2'
        Interval: '15'
        Target: 'HTTP:9000/'
        Timeout: '5'
        UnhealthyThreshold: '10'
      Listeners:
        - InstancePort: TCPPort1
          Condition: HasTCPPort1
          InstanceProtocol: HTTP
          LoadBalancerPort: TCPPort1
          SSLCertificateId: !If
            - HasLoadBalancerCertificateARN
            - !Ref LoadBalancerCertificateARN
            - !Ref 'AWS::NoValue'
          Protocol: !If
            - HasLoadBalancerCertificateARN
            - HTTPS
            - HTTP
      Scheme: internet-facing
      Subnets:
        - 'Fn::ImportValue':
              !Sub '${ParentVPCStack}-SubnetAPublic'
        - 'Fn::ImportValue':
              !Sub '${ParentVPCStack}-SubnetBPublic'
        - 'Fn::ImportValue':
              !Sub '${ParentVPCStack}-SubnetCPublic'
      SecurityGroups:
        - !Ref SecurityGroup
      Instances:
        - !Ref Server

【问题讨论】:

    标签: amazon-web-services automation amazon-cloudformation amazon-elb


    【解决方案1】:

    编辑:使用经典负载均衡器...

    LoadBalancer:
      Type: 'AWS::ElasticLoadBalancing::LoadBalancer'
      Properties:
        HealthCheck:
          HealthyThreshold: '2'
          Interval: '15'
          Target: 'HTTP:9000/'
          Timeout: '5'
          UnhealthyThreshold: '10'
        Listeners: !If 'HasTCPPort1'
          -
            - InstancePort: TCPPort1
              Condition: HasTCPPort1
              InstanceProtocol: HTTP
              LoadBalancerPort: TCPPort1
              SSLCertificateId: !If
                - HasLoadBalancerCertificateARN
                - !Ref LoadBalancerCertificateARN
                - !Ref 'AWS::NoValue'
              Protocol: !If
                - HasLoadBalancerCertificateARN
                - HTTPS
                - HTTP
          - !Ref 'AWS::NoValue' 
        Scheme: internet-facing
        Subnets:
          - 'Fn::ImportValue':
                !Sub '${ParentVPCStack}-SubnetAPublic'
          - 'Fn::ImportValue':
                !Sub '${ParentVPCStack}-SubnetBPublic'
          - 'Fn::ImportValue':
                !Sub '${ParentVPCStack}-SubnetCPublic'
        SecurityGroups:
          - !Ref SecurityGroup
        Instances:
          - !Ref Server
    

    【讨论】:

    • 更新了使用经典负载平衡器的答案...不再被认为是使用这些的好习惯,因此可能值得使用应用程序/网络负载平衡器。
    • 希望可以,我只是在编辑一个不受我控制的脚本。有很多这样的,不想破坏一致性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 2016-09-06
    • 2019-12-30
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    相关资源
    最近更新 更多