如何在AWS CDK中创建侦听器规则?

时间:2019-12-05 05:43:46

标签: python amazon-web-services amazon-cloudformation aws-cdk aws-load-balancer

您好,我正在使用AWS CDK。我正在尝试创建具有应用程序负载平衡的ECS。我创建ECS群集,任务定义,负载均衡器和列表器。

下面是我的负载均衡器。

lb = elbv2.ApplicationLoadBalancer(
            self, "MWSLoadBalancer",
            vpc = vpc,
            internet_facing= True,
            security_group= mws_vpc_sg_alb
        )

下面是我的听众

listener = lb.add_listener(
            "MWSLoadBalanceListener",
            port = 80,
            open = True,
        )

下面是健康检查

health_check = elbv2.HealthCheck(
            interval=core.Duration.seconds(60),
            path="/",
            timeout=core.Duration.seconds(5)
        )

以下是将ALB添加到ECS。

target = listener.add_targets(
            "MWSLoadBalancerTargetGroup",
            port=80,
            targets=[service],
            health_check=health_check,
        )

根据https://docs.aws.amazon.com/cdk/api/latest/docs/aws-elasticloadbalancingv2-readme.html#targets-and-target-groups,如果我们将平衡目标(例如AutoScalingGroup,ECS服务或单个实例)直接添加到您的侦听器,则会为您自动创建适当的TargetGroup。 因此,我没有创建任何目标组,而是创建了cdk synth时自动创建的目标组。接下来,我想对我的ALB设置列表规则。列表规则的云形成模板如下。

MWSLoadBalancerHttpListenerRule:
    Type: "AWS::ElasticLoadBalancingV2::ListenerRule"
    DependsOn: MWSLoadBalancer
    Properties:
      Actions:
        - Type: forward
          TargetGroupArn: !Ref MWSTargetGroup
      ListenerArn: !Ref MWSLoadBalanceListener
      Conditions:
        - Field: path-pattern
          Values:
            - "/api/*"
      Priority: 3

我试图创建如下列表规则。

 elbv2.ApplicationListenerRule(self, id = "listner rule", path_pattern="/api/*", priority = 1, listener = listener)

这是扔

  

侦听器规则至少需要执行一项操作

有人可以帮助我识别此错误吗?

1 个答案:

答案 0 :(得分:1)

创建ApplicationListenerRule时,您必须指定一个动作,该动作是target_groups,fixed_response或redirect_response中的一种。

  

target_groups (可选[List [IApplicationTargetGroup]])–将请求转发到的目标组。只能指定fixedResponse,redirectResponse或targetGroups之一。

elbv2.ApplicationListenerRule(
    self, 
    id="listener rule", 
    path_pattern="/api/*", 
    priority=1, 
    listener=listener, 
    target_groups=[target]
)

仅需注意,在这种情况下有一个CDK模式aws-ecs-patterns,它为常见的架构模式提供了更高层次的构造。

https://docs.aws.amazon.com/cdk/api/latest/docs/aws-ecs-patterns-readme.html