嗨,我正在尝试使用"IF"函数,就像在RDS DeletionPolicy的云形成文档中提到的那样,但由于某种原因,它说我的函数不返回字符串.
关于条件语句的AWS文档
这是条件:
"DeletionPolicy" : { "Fn::If" : [ "CreateProdResources", "Snapshot", "Delete" ]}
错误是标题中的错误:
Template validation error: Template format error: Every DeletionPolicy member must be a string.
其他尝试不起作用:
有了地图:
"RdsDeletionPolicyMap" :{ "production" : { "policy" : "Snapshot" }, "staging" : { "policy" : "Delete" } }
然后:
"DeletionPolicy" : { "Fn::FindInMap" : [ "RdsDeletionPolicyMap", {"Ref": "RailsEnvironment"}, "policy" ] }
和Simple "Ref": ...
一样也不行.我非常怀疑这是一个关于cloudformation的错误
问题是DeletionPolicy必须设置为三个字符串之一.而且,虽然你的If检查将返回其中一个,从系统的角度来看,它只知道它返回一个String - 但不保证是一个有效的字符串(与你的map和参数检查相同),因此它只接受字符串文字,而不是解析为字符串的东西.
我相信此限制已经提交给AWS工程团队,因为这是一个令人讨厌的问题.