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

CloudFormation模板部署EKS集群时List类型参数使用!Sub函数报错的问题求助

解决CloudFormation EKS模板中的Fn::Sub ValidationError问题

你遇到的这个ValidationError确实是因为错误使用了!Sub函数,咱们来一步步拆解原因和修复方案:

错误根源

你的ListOfSecurityGroupIDs和ListOfSubnetIDs参数定义的是List类型(List<AWS::EC2::SecurityGroup::Id>和List<AWS::EC2::Subnet::Id>),本质是数组。而!Sub(即Fn::Sub)的核心作用是替换字符串中的变量,它只能处理字符串类型的输入,无法直接解析数组。当你在SecurityGroupIds和SubnetIds里用!Sub ${ListOfSecurityGroupIDs}时,CloudFormation尝试把数组强制转换成字符串,自然就触发了验证错误。

排查思路

  1. 核对参数类型与函数兼容性:先明确每个参数的类型,再检查你使用的CloudFormation函数是否支持该类型。比如List类型的参数不能直接传给!Sub,因为!Sub只认字符串。
  2. 查看资源属性的要求:AWS::EKS::Cluster的ResourcesVpcConfig属性中,SecurityGroupIds和SubnetIds本身就支持接收List类型的输入,完全不需要额外转换。

修复后的模板

把模板中ResourcesVpcConfig部分的代码修改为直接引用参数即可:

Resources:
  EKSCluster:
    Type: AWS::EKS::Cluster
    Properties:
      Name: !Sub ${ClusterName}
      Version: !Sub ${ClusterVersion}
      RoleArn: !Sub ${RoleArnValue}
      ResourcesVpcConfig:
        SecurityGroupIds: !Ref ListOfSecurityGroupIDs
        SubnetIds: !Ref ListOfSubnetIDs

这里用!Ref来引用List类型的参数,它会直接返回整个数组,完美匹配EKS集群对这两个属性的要求。

另外,模板中Name、Version、RoleArn的!Sub用法是没问题的,因为这些参数都是字符串/数字类型,!Sub可以正常处理。

验证注意点

你原来的AWS CLI部署命令不需要做任何修改,因为List类型的参数用逗号分隔多个值的传递格式是正确的,修复后的模板可以直接接收这些参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:49:09