Amazon web services 输入模板格式错误:每个默认成员都必须是字符串(Cloudformation模板问题)
我试图验证cloudformation模板,而cfn validate返回一个无用的错误 “格式错误的输入模板格式错误:每个默认成员都必须是字符串” 有人知道如何调试这个吗?如果Amazon web services 输入模板格式错误:每个默认成员都必须是字符串(Cloudformation模板问题),amazon-web-services,Amazon Web Services,我试图验证cloudformation模板,而cfn validate返回一个无用的错误 “格式错误的输入模板格式错误:每个默认成员都必须是字符串” 有人知道如何调试这个吗?如果cfn- validate将在出现错误时返回错误或至少返回资源名称 CloudformationTemplates调试起来非常痛苦。当您指定参数并以某种方式计算其默认值(通常是引用其他参数)时,就会出现此问题 这是无效的定义-参数的默认值必须严格为字符串,命令行工具可以用其他字符串替换这些字符串。在我的cfn模板中使用类
cfn-
validate
将在出现错误时返回错误或至少返回资源名称
CloudformationTemplates调试起来非常痛苦。当您指定
参数并以某种方式计算其默认值(通常是引用其他参数)时,就会出现此问题
这是无效的定义-参数的默认值必须严格为字符串,命令行工具可以用其他字符串替换这些字符串。在我的cfn模板中使用类型为CommaDelimitedList
的参数时,我收到了相同的错误消息
LoadBalancerSubnets:
Description: List of subnets for the ApplicationLoadBalancer
Type: CommaDelimitedList
Default: [ "subnet-123456", "subnet-012345" ]
这是因为我对CommaDelimitedList
类型的错误解释。我认为它实际上是一个列表,但结果是该值应该是一个字符串值,其中各个元素应该用逗号分隔。
因此,我将模板更改为如下所示:
LoadBalancerSubnets:
Description: List of subnets for the ApplicationLoadBalancer
Type: CommaDelimitedList
Default: "subnet-123456,subnet-012345"
这起作用了
这是一个非常普遍的错误,在其他情况下也可能会抛出相同的错误
但是,我想与大家分享我对这个错误的经验,这样可以帮助其他遇到同样问题的人。我也在输出
描述字段中看到了这个错误(我使用的是!Sub
)。必须删除!Sub
并使用纯文本。我认为您没有必要!裁判!我喜欢这个
Parameters:
RelationTableName:
Description: relations table name
Type: String
Default: !Ref "relations"
这个错误消息对我来说似乎很有用。检查每个默认成员并验证它们是否都是字符串,也许?错误字符串应该放在单独的一行,并使用>作为引号输入使用`反勾号突出显示句子的内联代码请记住,Fn::Join
的结果不算作stringsyeah,甚至我也遇到了这个错误。只要检查这个值应该是严格的字符串“默认值”:“aaa bbb ccc”“。此处不接受任何其他值。之前我传递字符串数组,因此出现此错误。您是否参考了AWS文档@guss@KonstantinA.Magg-此处提供了相关文档:。从文档中看,这并不明显,但当他们说“适当类型的值”时,他们指的是实际值,而不是计算值的公式或代码。虽然所有JSON示例都是字符串,甚至是数字类型的字符串,但它们也可以是YAML数字,但它们必须是文字值。“这个错误非常普遍”——事实上。这修复了我的问题,其中Type:List
,默认值需要是subnet-123,subnet-456