whitebear
whitebear

Reputation: 12423

Using existing loadbalancer for adding targetgroup

I want to make the targetGroup by cdk and use the ALB already existed.

This error happens.

Error: .listeners can only be accessed if the class was constructed as an owned, not looked up, load balancer
at LookedUpApplicationLoadBalancer.get listeners [as listeners]

I can't access the listeners of ALB

What I want to do is use one load balancer for two ECS and two domain.

www.exampleA.com -> port 80 -> ALB -> fargate A
www.exampleB.com -> port 80 -> ALB -> fargate B

These are my code below.

const lb = elb.ApplicationLoadBalancer.fromLookup(this, 'ALB', {
  loadBalancerArn: 'arn:aws:elasticloadbalancing:ap-northeast-1:678100228232:loadbalancer/app/app-load-balancer/1a97159fcaf4d6c0',
});
const listener = lb.listeners[0];
const targetGroup = listener.addTargets("ECS", {
  protocol: elb.ApplicationProtocol.HTTP,
  port: 80,
  targets: [ecsAdminService]
});

targetGroup.configureHealthCheck({
  path: "/",
  port: "8080" 
})

Or if it is impossible, I want to make targetgroup without ALB

(then I can attach targetgroup to ALB manually)

So, I tried this

const targetGroup = new elb.ApplicationTargetGroup(this,"ECS", {
  protocol: elb.ApplicationProtocol.HTTP,
  port: 80,
  targets: [ecsAdminService],
  vpc: cluster.vpc,
});

targetGroup.configureHealthCheck({
  path: "/",
  port: "8080" 
})

However this error comes

"Invalid request provided: UpdateService error: The target group with targetGroupArn arn:aws:elasticloadbalancing:ap-northeast-1:678100228133:targetgroup/CdkTr-ECSD2-S1ROICFY9661/f1f3e3b280c2a008 does not have an associated load balancer

Upvotes: 4

Views: 1708

Answers (1)

whitebear
whitebear

Reputation: 12423

I can use existing ALB like this below

Actually, what I need is only securityGroup of ALB and listener.

const securityGroup = ec2.SecurityGroup.fromSecurityGroupId(this, "MyAlbSecGroup", "sg-0ea7a62badcc673a3")
const listenerArn = "arn:aws:elasticloadbalancing:ap-northeast-1:67810022242:listener/app/my-alb-id-listener/1a97159fcaf4d6c0/09a32815415beae6";
const existingListener = elb.ApplicationListener.fromApplicationListenerAttributes(this, "SharedListener", {
  listenerArn,
  securityGroup
});
const targetGroup = new elb.ApplicationTargetGroup(this,"ECS", {
  port: 80,
  targets: [ecsAdminService],
  vpc: cluster.vpc,
});
existingListener.addTargetGroups("tg",{
  priority:1,
  conditions:[
    elb.ListenerCondition.hostHeaders(['my.example.com'])
  ],
  targetGroups:[targetGroup]
})

Upvotes: 1

Related Questions