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

CloudFormation创建NLB目标组报错Id属性必须为字符串如何解决?

错误根因

你将InstanceID参数的类型设置为List<AWS::EC2::Instance::Id>,此时通过!Ref InstanceID返回的结果是实例ID的数组集合,但Targets配置项下的每个Id字段要求传入单个字符串类型的实例ID,直接把数组赋值给单个Id字段就会触发类型不匹配的报错。

修复方案

方案1:自动遍历实例列表生成Targets(推荐)

使用CloudFormation原生的!ForEach函数遍历实例ID列表,自动生成所有实例的Target配置,适配任意数量的关联实例,修改后的完整模板如下:

Parameters:
  InstanceID:
    Description: 请选择需要关联的实例ID
    Type: List<AWS::EC2::Instance::Id>
    Description: 选择实例ID关联到目标组
  VPC:
    Description: 目标组所属的VPC
    Type: AWS::EC2::VPC::Id
    ConstraintDescription: 选择目标组对应的VPC ID

Resources:
    EC2TargetGroup:
      Type: AWS::ElasticLoadBalancingV2::TargetGroup
      Properties:                                                     
        HealthCheckIntervalSeconds: 30
        HealthCheckProtocol: TCP
        HealthCheckTimeoutSeconds: 10
        HealthyThresholdCount: 3        
        Name: NLBTargetGroupForEndpointService
        Port: 22
        Protocol: TCP        
        TargetType: instance
        # 遍历实例ID列表生成Targets配置
        Targets: !ForEach
          Instance: !Ref InstanceID
          Output:
            Id: !Ref Instance
        UnhealthyThresholdCount: 3
        VpcId: !Ref VPC
        Tags:
        - Key: Name
          Value: EC2TargetGroup
        - Key: Port
          Value: 22
        - Key: Protocol
          Value: TCP

注意:如果你的CloudFormation环境不支持!ForEach函数(2023年之前的旧版本环境),可以使用方案2。

方案2:手动指定列表下标取值

如果关联的实例数量固定,可以通过!Select函数从列表中取出单个实例ID赋值给Id字段,比如绑定2个实例的写法如下:

Targets:
 - Id: !Select [0, !Ref InstanceID]
 - Id: !Select [1, !Ref InstanceID]

如果需要绑定N个实例,依次添加下标为0、1、2...N-1的条目即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:15:00