2015-12-15 30 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

相關問題