Skip to content

aws_ecs_patterns: ApplicationLoadBalancedFargateService does not allow multiple services to connect to the same load balancer #32958

Open
@bytesnz-doc

Description

@bytesnz-doc

Describe the bug

(Reopening of #24975)

The ApplicationLoadBalancedFargateService and ApplicationLoadBalancedServiceBase classes do not allow for multiple services to be created against the same load balancer. An example repo is https://gitlab.com/bytesnz/fargate-services-fail/-/blob/main/index.ts#L47 based off https://github.com/aws-samples/aws-cdk-examples/tree/main/typescript/application-load-balancer. The cause is a hardcoded name for the listener of PublicListener.

Regression Issue

  • Select this option if this issue appears to be a regression.

Last Known Working CDK Version

No response

Expected Behavior

ApplicationLoadBalancedFargateService and ApplicationLoadBalancedServiceBase classes use a unique name for the listener and cdk synth generates that stack correctly and stack is able to be deployed

Current Behavior

cdk synth throws an error

/projects/node_modules/constructs/src/construct.ts:430
      throw new Error(`There is already a Construct with name '${childName}' in ${typeName}${name.length > 0 ? ' [' + name + ']' : ''}`);
            ^
Error: There is already a Construct with name 'PublicListener' in ApplicationLoadBalancer [NZTCSLoadBalancer]
    at Node.addChild (/projects/node_modules/constructs/src/construct.ts:430:13)
    at new Node (/projects/node_modules/constructs/src/construct.ts:71:17)
    at new Construct (/projects/node_modules/constructs/src/construct.ts:482:17)
    at new Resource (/projects/node_modules/aws-cdk-lib/core/lib/resource.js:1:1309)
    at new BaseListener (/projects/node_modules/aws-cdk-lib/aws-elasticloadbalancingv2/lib/shared/base-listener.js:1:1721)
    at new ApplicationListener (/projects/node_modules/aws-cdk-lib/aws-elasticloadbalancingv2/lib/alb/application-listener.js:1:3663)
    at ApplicationLoadBalancer.addListener (/projects/node_modules/aws-cdk-lib/aws-elasticloadbalancingv2/lib/alb/application-load-balancer.js:1:6005)
    at new ApplicationLoadBalancedServiceBase (/projects/node_modules/aws-cdk-lib/aws-ecs-patterns/lib/base/application-load-balanced-service-base.js:1:4013)
    at new ApplicationLoadBalancedFargateService (/projects/node_modules/aws-cdk-lib/aws-ecs-patterns/lib/fargate/application-load-balanced-fargate-service.js:1:864)
    at new BackEnd (/projects/src/stacks/backEnd.ts:79:23)

Reproduction Steps

  1. Clone the repo https://gitlab.com/bytesnz/fargate-services-fail
  2. Install node dependencies
  3. Try to synth or deploy with CDK

Possible Solution

I was wondering if the id could be something like id + 'Listener' instead of 'PublicListener'. Can do a PR for, but there are a few other ids that might need the same treatment.

Additional Information/Context

No response

CDK CLI Version

2.175.1

Framework Version

2.175.1

Node.js Version

22

OS

Ubuntu

Language

TypeScript

Language Version

5.1.6

Other information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    @aws-cdk/aws-ecs-patternsRelated to ecs-patterns librarybugThis issue is a bug.effort/mediumMedium work item – several days of effortfeature-requestA feature should be added or improved.p2

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions