ALB 侦听器需要至少一个 targetGroup

ALB listener requires at least one targetGroup

我在一个 CDK 项目中制作了一个 ApplicationLoadBalancer 并且想在多个项目中使用这个 ApplicationLoadBalancer

比如我有3个cdk项目maincdk,app1cdk,app2cdk

然而,在maincdk中:

    const lb = new elb.ApplicationLoadBalancer(this, "lb", {
      vpc: vpc,
      loadBalancerName : "main-lb",
      internetFacing: true,
      vpcSubnets: vpc.selectSubnets({ subnetType: ec2.SubnetType.PUBLIC }),
      securityGroup: adminLbSg
    });

    const listener = lb.addListener("main-listener", { port: 80 });

发生此错误:

    [CommonLbStack/lb/main-listener] Listener needs at least one default action or target group (call addTargetGroups or addAction)

它说 listener 应该至少有一个 TargetGroup

我添加了一个像这样的虚拟动作,但出现了同样的错误:

    listener.addAction('Fixed', {
      priority: 1,
      conditions: [
        elb.ListenerCondition.pathPatterns(['/ok']),
      ],
      action: elb.ListenerAction.fixedResponse(200, {
        messageBody: 'OK',
      })
    });

它说你至少需要一个:

  • 默认操作
  • 或目标群体

既然您不想从 maincdk 添加 TargetGroup,为什么不添加 default 操作?您上面的固定操作不是默认操作。尝试类似的东西:

listener.addAction('DefaultAction', {
  action: elbv2.ListenerAction.fixedResponse(404, {
    contentType: elbv2.ContentType.TEXT_PLAIN,
    messageBody: 'Cannot route your request; no matching project found.',
  }),
});

然后您可以在来自 app1cdkapp2cdk 项目的规则之上分层条件规则,以根据您需要的任何标准(路径、主机名等)路由到这些项目

请参阅:侦听器配置文档中的“Default Rules”。