AWS ECS服务和ELBv2位于不同的堆栈中

时间:2017-10-04 13:51:42

标签: amazon-cloudformation amazon-elb amazon-ecs

可以为ECS服务(例如蓝/绿)设置CF堆栈,为前端ELBv2设置单独的堆栈吗?我已尝试在ECS堆栈中使用ELB TargetGroup,在另一个堆栈中尝试使用负载均衡器和侦听器,但构建目标组时Cloud Formation报告并出错

" targetGroupArn xxxxxx的目标组没有关联的负载均衡器。"

然而,目标组资源中没有任何内容可以定义依赖于它的任何负载均衡器:

 ELB2TargetGroup:
    Type: AWS::ElasticLoadBalancingV2::TargetGroup
    Properties:
      HealthCheckIntervalSeconds: 60
      UnhealthyThresholdCount: 10
      HealthCheckPath: /
      Port:     !Ref ALBPort
      Protocol: !Ref ALBProtocol
      VpcId:
        Fn::ImportValue: !Sub "${ECSClusterStack}-ClusterVPC"

1 个答案:

答案 0 :(得分:1)

希望您已经解决了此问题。但是,以防万一有人来这里寻找同样的问题。

  

从本质上讲,您没有做错任何事情。只是,您需要一个侦听器规则来将目标组 Load Balancer侦听器关联。

这是一个示例TargetGroup资源:

...
ExampleTG:
  Type: AWS::ElasticLoadBalancingV2::TargetGroup
  Properties:
    HealthCheckIntervalSeconds: 30
    HealthCheckProtocol: HTTP
    HealthCheckTimeoutSeconds: 5
    HealthyThresholdCount: 2
    HealthCheckPath: /healthcheck
    HealthCheckPort: 80
    Matcher:
      HttpCode: '200'
    Name: !Join [ "-", [ Example, !Ref SomeParameter] ]
    Port: 80
    Protocol: HTTP
    TargetGroupAttributes:
    - Key: deregistration_delay.timeout_seconds
      Value: '15'
    UnhealthyThresholdCount: 3
    VpcId:
      'Fn::ImportValue': !Sub '${ParentVPCStack}-vpc'

我想你已经有了。现在您只需要一个ListernerRule:

...
ExampleListernerRule:
  Type: AWS::ElasticLoadBalancingV2::ListenerRule
  Properties:
    Actions:
      - Type: forward
        TargetGroupArn: !Ref ExampleTG
    Conditions:
      - Field: host-header
        Values:
        - "example.*"
    ListenerArn:
      'Fn::ImportValue': !Sub '${ParentLBStack}-existing-listener'
    Priority: 1

您可以轻松地从现有堆栈(在您的情况下为ELBv2)导入侦听器,该堆栈将负载均衡器与目标组相关联。