Proprietà condizionale in AWS CloudFormation


10

Abbiamo un modello AWS CloudFormation per la creazione di alcune istanze EC2. Alcuni di questi tuttavia richiedono uno specifico PrivateIpAddresse sto lottando per capire come incorporarlo nel modello.

Per ora ho un parametro template PrivateIPe una creazione di una Condizione RequestedPrivateIP. Fin qui tutto bene. Tuttavia, non riesco a capire come incorporarlo nella AWS::EC2::Instancespecifica delle risorse. Ho provato questo:

    "PrivateIpAddress": {
        "Fn::If": [ "RequestedPrivateIP",
            { "Ref": "PrivateIP" },
            ""                            <-- This doesn't work
        ]
    },

Ma ciò fallisce quando RequestedPrivateIPè falso

CREATE_FAILED    AWS::EC2::Instance    NodeInstance    Invalid addresses: []

Qualche idea su come assegnare facoltativamente un IP privato statico e, se non specificato, lasciarlo ad AWS per impostarne uno dinamico?

Risposte:



0

Dal momento che sembra che la PrivateIpAddressproprietà non supporti una stringa vuota in quanto valore, suggerirei di creare due risorse separate per te AWS::EC2::Instance. Uno di essi avrà la tua condizione, RequestedPrivateIPmentre l'altro dovrebbe avere la stessa condizione ma negato, ad es DidNotRequestPrivateIP.

"InstanceWithPrivateIp": {
    "Type": "AWS::EC2::Instance",
    "Condition": "RequestedPrivateIP",
    "Properties": {
        [...]
    }
},

"InstanceWithoutPrivateIp": {
    "Type": "AWS::EC2::Instance",
    "Condition": "DidNotRequestPrivateIP",
    "Properties": {
        [...]
    }
}

1
Questa è davvero un'opzione, ma infrange gravemente il principio DRY (Don't Repeat Yourself) che non mi va di fare. Inoltre - ci sono spesso altre proprietà che possono essere impostate o meno, ad esempio se ELB è in ascolto su HTTPS in base al fatto che sia stato impostato un certificato SSL. Cercare di cogliere tutte queste piccole variazioni ripetendo tutte le dichiarazioni con un leggero cambiamento porterebbe rapidamente a un modello enorme non mantenibile. Ma grazie per il suggerimento comunque.
MLu,

1
Sono totalmente d'accordo con te @MLu, ripetere non è mai divertente. Tuttavia, dalla mia esperienza con CloudFormation a volte sei costretto a ripetere te stesso. L'altra soluzione che vedo è quella di creare substacks invece che includi con le condizioni che ho menzionato sopra e poi in quei substacks fai cose specifiche per quella condizione.
Bazze,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.