AWS CloudFormation StringList问题:TrustedSigners参数类型不匹配报错
解决CloudFormation中CloudFront TrustedSigners AwsAccountNumbers类型不匹配的问题
这个错误的核心原因是:CloudFront的TrustedSigners.AwsAccountNumbers要求传入字符串数组(Array),但你的代码里要么返回了单个字符串(比如"882410330966"),要么对String类型参数做了不完整的拆分(只取了第一个元素),导致类型不匹配。
下面是具体的修复方案:
1. 修正参数类型
把awsAccountNumbers的类型改成CommaDelimitedList——这是CloudFormation专门用来处理逗号分隔字符串的参数类型,它会自动将用户输入的逗号分隔字符串转换成字符串数组,正好匹配AwsAccountNumbers的类型要求,不需要手动拆分。
参数部分修正后:
"awsAccountNumbers": { "Type": "CommaDelimitedList", "Description": "逗号分隔的可信AWS账号ID列表" }
2. 修正资源部分的条件判断
你之前的代码在withTrustedSignersasSelf为true时返回的是单个字符串,不符合数组要求,需要改成数组格式;另外,非Self场景下直接引用参数即可,不需要Split和Select(因为CommaDelimitedList类型的Ref返回值已经是数组了)。
资源部分修正后:
"TrustedSigners": { "AwsAccountNumbers": { "Fn::If": [ "withRestrictViewerAccessasYes", { "Fn::If": [ "withTrustedSignersasSelf", ["882410330966"], // 改为数组格式,匹配类型要求 {"Ref": "awsAccountNumbers"} // 直接引用CommaDelimitedList参数,自动为数组 ] }, {"Ref": "AWS::NoValue"} ] }, "Enabled": {"Ref": "trustedSignersEnabled"} }
为什么之前的写法会报错?
- 用
String类型参数时,即使你用Split拆分,也只通过Select取了第一个元素,不仅会丢失其他账号,而且Self场景返回的是单个字符串,完全不符合Array类型要求。 CommaDelimitedList是CloudFormation中唯一能直接生成字符串数组的参数类型,完美匹配AwsAccountNumbers的需求,不需要额外的字符串处理操作。
内容的提问来源于stack exchange,提问作者user4108565
相关产品推荐
相关产品推荐

