Niranjan
Niranjan

Reputation: 2229

How to create listener rule in AWS CDK?

Hi I am in working AWS CDK. I am trying to create ECS with Application Load balance. I create ECS Cluster, Task Definition, Load balancer and listner.

Below is my load balancer.

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

Below is my listener

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

Below is health check

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

Below is adding ALB to ECS.

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

As per https://docs.aws.amazon.com/cdk/api/latest/docs/aws-elasticloadbalancingv2-readme.html#targets-and-target-groups If we add our balancing targets (such as AutoScalingGroups, ECS services or individual instances) to your listener directly, the appropriate TargetGroup will be automatically created for you. So I have not created any Target groups but one created automatically When I do cdk synth. Next I want to have listner rule to my ALB. Cloud formation template of listner rule is as below.

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

I tried to create listner rule as below.

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

This is throwing

Listener rule needs at least one action

Can someone help me to identify this error?

Upvotes: 5

Views: 12553

Answers (1)

Vikyol
Vikyol

Reputation: 5655

When creating an ApplicationListenerRule you have to specify an action, which is one of target_groups, fixed_response or redirect_response.

target_groups (Optional[List[IApplicationTargetGroup]]) – Target groups to forward requests to. Only one of fixedResponse, redirectResponse or targetGroups can be specified.

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

Just to note that there is a CDK pattern for this case, aws-ecs-patterns, which provides higher level constructs for common architectural patterns.

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

Upvotes: 6

Related Questions