Reputation: 2229
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
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