2015-12-15 16 views
9

Ciao Sto cercando di utilizzare la funzione "IF" proprio come accennato nella documentazione di formazione cloud per RDS DeletionPolicy, ma per qualche motivo si dice che la mia funzione non restituisce un stringa.Errore di formato del modello di Cloudformation: Ogni membro di DeletionPolicy deve essere una stringa

AWS Documentation on conditional statements

qui è la condizione:

"DeletionPolicy" : { 
    "Fn::If" : [ 
     "CreateProdResources", 
     "Snapshot", 
     "Delete" 
    ]} 

e l'errore è quello nel titolo:

Template validation error: Template format error: Every DeletionPolicy member must be a string. 

Altri tentativi che non ha funzionato:

Con una mappa:

"RdsDeletionPolicyMap" :{ 
     "production" : { 
      "policy" : "Snapshot" 
     }, 
     "staging" : { 
      "policy" : "Delete" 
     } 
    } 

E poi:

"DeletionPolicy" : { 
     "Fn::FindInMap" : [ "RdsDeletionPolicyMap", {"Ref": "RailsEnvironment"}, "policy" ] 
    } 

Così come un semplice "Ref": ... non ha funzionato pure. Sospetto molto che si tratti di un bug con cloudformation

risposta

5

Il problema è che DeletionPolicy deve essere impostato su una delle tre stringhe. E, anche se il tuo controllo If restituirà uno di questi, da una prospettiva sistematica, sa solo che sta restituendo una stringa - ma non è garantito che sia una stringa valida (uguale alla tua mappa e ai parametri), e quindi accetta solo una stringa letterale e non qualcosa che si risolve in stringa.

Credo che questa limitazione sia stata sollevata in precedenza al team di AWS Engineering, in quanto è una seccatura.

+0

IMO questo è sicuramente un bug. Qualche idea su come aggirarla? – Gleeb

+0

È possibile aggiungere un'istruzione condizionale e disporre di 2 criteri di conservazione con quello appropriato aggiunto in base alla condizione. Sicuramente non ideale. –

+0

Grazie, vedo male cosa posso farne – Gleeb

Problemi correlati