2015-12-15 27 views
9

您好我正在尝试使用“IF”函数,就像在RDS DeletionPolicy的云形成文档中提到的一样,但由于某种原因它说我的函数没有返回串。Cloudformation模板格式错误:每个DeletionPolicy成员都必须是字符串

AWS Documentation on conditional statements

这里的条件:

"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" ] 
    } 

除了作为一个简单的"Ref": ...没有正常工作。我高度怀疑这是一个云形成的错误

回答

5

问题是,必须将DeletionPolicy设置为三个字符串之一。而且,尽管您的If检查将从系统角度返回其中的一个,但它只知道它返回了一个字符串 - 但不能保证是有效的字符串(与您的映射和参数检查相同),因此它只接受一个字符串文字,而不是解析为字符串的东西。

我相信这个限制已经提交给AWS工程团队以前,因为这是一个麻烦。

+0

IMO这绝对是一个错误。有关如何解决它的任何想法? – Gleeb

+0

您可以添加条件语句并拥有2个保留策略,并根据条件添加相应的保留策略。绝对不理想。 –

+0

谢谢,看看我能做些什么 – Gleeb

相关问题