You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS CDK创建ALB时设置targets,替代弃用IpTarget并解决类型错误

问题原因

报错的核心是参数类型不匹配:
你已经将pgAdminTarget定义为InstanceIdTarget[]数组类型,在传入targets参数时又额外套了一层中括号[],最终传入的实际值是二维数组[[InstanceIdTarget实例]]。而targets参数要求接收一维的IApplicationLoadBalancerTarget类型实例数组,外层数组本身不具备attachToApplicationTargetGroup方法,因此触发类型报错。

解决方法

根据你的使用场景二选一即可:

场景1:仅需要挂载单个EC2实例到目标组

无需单独定义数组存储目标,直接传入实例即可,修正目标组配置的targets字段:

const pgAdminTg = new elasticloadbalancingv2.ApplicationTargetGroup(this, "TargetGroup", {
  healthCheck: {
    path: "/health.html",
    port: "80",
    protocol: elasticloadbalancingv2.Protocol.HTTP
  },
  port: 80,
  protocol: elasticloadbalancingv2.ApplicationProtocol.HTTP,
  targetType: elasticloadbalancingv2.TargetType.INSTANCE,
  // 直接传入单个InstanceIdTarget实例,外层仅保留参数要求的数组包裹
  targets: [new elasticloadbalancingv2targets.InstanceIdTarget(props.instance.instanceId, 80)],
  vpc,
})

场景2:需要批量挂载多个目标到目标组

直接传入你定义好的目标数组,不要额外套中括号:

const pgAdminTarget: elasticloadbalancingv2targets.InstanceIdTarget[] = [];
pgAdminTarget.push(new elasticloadbalancingv2targets.InstanceIdTarget(props.instance.instanceId, 80));
// 可继续push其他目标实例

const pgAdminTg = new elasticloadbalancingv2.ApplicationTargetGroup(this, "TargetGroup", {
  // 其他配置不变
  targets: pgAdminTarget, // 直接传已经定义好的一维数组即可
  vpc,
})
补充说明:原IpTarget的正确替换方式

如果你不需要改为INSTANCE类型目标,想要保持原来的IP类型目标逻辑,只需从新的包导入IpTarget即可,原elbv2包内的IpTarget是弃用版本,功能已迁移到@aws-cdk/aws-elasticloadbalancingv2-targets包:

import * as elasticloadbalancingv2targets from "@aws-cdk/aws-elasticloadbalancingv2-targets";

// 后续使用替换为新包的IpTarget,其余逻辑和原有代码完全一致
targets: [new elasticloadbalancingv2targets.IpTarget(target.instancePrivateIp)],
targetType: elasticloadbalancingv2.TargetType.IP,

内容的提问来源于stack exchange,提问作者Take

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 01:15:06