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

AWS CloudFormation中使用!Sub参数化IAM资源名称报错排查

问题分析与解决

这个错误的核心原因是GroupName属性被解析为非字符串类型,而CloudFormation明确要求该属性必须是字符串。以下是最常见的问题场景及修复方案:

常见错误场景1:错误将GroupName定义为列表

如果你的模板中GroupName字段是以下写法(不小心用了列表语法):

RkVpcEksctlPolicyGroup:
  Type: AWS::IAM::Group
  Properties:
    GroupName:
      - !Sub "${Prefix}-RkVpcEksctlPolicyGroup"

这种写法会让GroupName变成列表类型,直接触发类型错误。

修复方案:去掉列表符号,直接将!Sub结果赋值给GroupName:

RkVpcEksctlPolicyGroup:
  Type: AWS::IAM::Group
  Properties:
    GroupName: !Sub "${Prefix}-RkVpcEksctlPolicyGroup"

常见错误场景2:!Sub引用的变量非字符串类型

如果Prefix这类被引用的变量是数字、列表等非字符串类型(比如参数定义时用了Number或List<String>),!Sub拼接后的结果可能无法被识别为纯字符串。

修复方案:确保被引用的变量是字符串类型。比如参数定义:

Parameters:
  Prefix:
    Type: String
    Default: "MyApp"

常见错误场景3:!Sub语法错误

如果使用!Sub的数组格式(带变量映射),但映射格式错误或变量未定义,也可能导致解析失败返回非字符串。

错误写法:

GroupName: !Sub ["${Prefix}-${Suffix}", {"Prefix": "MyApp"}]
# 缺少Suffix变量的定义

修复方案:确保所有变量都在映射中定义完整:

GroupName: !Sub ["${Prefix}-${Suffix}", {"Prefix": "MyApp", "Suffix": "RkVpcEksctlPolicyGroup"}]

验证方法

你可以先简化GroupName的值为纯字符串测试,比如:

GroupName: "Test-RkVpcEksctlPolicyGroup"

如果这个写法不报错,说明问题确实出在!Sub的使用或变量类型上,再逐步排查!Sub的语法和变量定义即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:47:08