如何通过AWS CDK将ALB设置为NLB目标组的目标?
解决AWS CDK中将ALB配置为NLB目标组目标的类型错误问题
你遇到的错误是因为ApplicationLoadBalancer实例本身没有实现INetworkLoadBalancerTarget接口,无法直接作为NetworkTargetGroup的目标传入。需要用CDK提供的LoadBalancerTarget.fromApplicationLoadBalancer()方法将ALB包装成符合要求的目标类型。
修改后的代码片段
在你的NLB目标组部分,替换原有的注释代码,使用包装后的ALB作为目标:
import * as elbv2 from '@aws-cdk/aws-elasticloadbalancingv2'; // 保留你原有的nlb和nlbListener代码... const nlbTargetGroup = new elbv2.NetworkTargetGroup($this, `BackendNLBTargetGroup-${stage}`, { port: 80, vpc: vpc, targetType: elbv2.TargetType.ALB, // 使用包装方法将ALB转换为合法的网络负载均衡目标 targets: [elbv2.LoadBalancerTarget.fromApplicationLoadBalancer(service.loadBalancer)] }); nlbListener.addTargetGroups(`BackendNLBAddingTargetGroup-${stage}`, nlbTargetGroup);
另一种写法:先创建目标组再添加目标
如果你更倾向于分步操作,也可以先创建空的目标组,再通过addTarget方法添加包装后的ALB:
const nlbTargetGroup = new elbv2.NetworkTargetGroup($this, `BackendNLBTargetGroup-${stage}`, { port: 80, vpc: vpc, targetType: elbv2.TargetType.ALB }); // 添加ALB目标 nlbTargetGroup.addTarget(elbv2.LoadBalancerTarget.fromApplicationLoadBalancer(service.loadBalancer)); nlbListener.addTargetGroups(`BackendNLBAddingTargetGroup-${stage}`, nlbTargetGroup);
关键说明
LoadBalancerTarget.fromApplicationLoadBalancer()方法会生成符合INetworkLoadBalancerTarget接口要求的对象,自动处理ALB的目标注册逻辑。- 确保你的ALB和NLB处于同一个VPC中,且目标组的端口与ALB的监听端口匹配(这里都是80,符合要求)。
内容的提问来源于stack exchange,提问作者ryuutatsuo
相关产品推荐
相关产品推荐

