Właściwość warunkowa w AWS CloudFormation

10

Mamy szablon AWS CloudFormation do tworzenia niektórych instancji EC2. Niektóre z nich wymagają jednak określonego PrivateIpAddressi staram się wymyślić, jak włączyć to do szablonu.

Na razie mam parametr szablonu PrivateIPi tworzenie warunku RequestedPrivateIP. Na razie w porządku. Nie mogę jednak wymyślić, jak włączyć to do AWS::EC2::Instancespecyfikacji zasobów. Próbowałem tego:

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

Ale to się nie udaje, gdy RequestedPrivateIPjest to fałszywe

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

Masz pomysł, jak opcjonalnie przypisać statyczny prywatny adres IP, a jeśli nie zostanie określony, pozostaw AWS ustawienie dynamicznego?

MLu
źródło

Odpowiedzi:

0

Ponieważ wygląda na to, że PrivateIpAddresswłaściwość nie obsługuje pustego ciągu, ponieważ ma wartość, sugerowałbym utworzenie dwóch oddzielnych zasobów AWS::EC2::Instance. Jeden z nich będzie miał twój stan, RequestedPrivateIPpodczas gdy drugi powinien mieć ten sam stan, ale zanegowany, np DidNotRequestPrivateIP.

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

"InstanceWithoutPrivateIp": {
    "Type": "AWS::EC2::Instance",
    "Condition": "DidNotRequestPrivateIP",
    "Properties": {
        [...]
    }
}
Bazze
źródło
1
To rzeczywiście opcja, ale poważnie łamie zasadę DRY (Don't Repeat Yourself), do której nie jestem chętny. Poza tym - często można ustawić inne właściwości, np. Czy ELB nasłuchuje na HTTPS na podstawie tego, czy został ustawiony certyfikat SSL. Próba wyłapania wszystkich tych małych odmian poprzez powtórzenie wszystkich deklaracji z niewielką zmianą szybko doprowadziłaby do powstania ogromnego, niemożliwego do utrzymania szablonu. Ale i tak dzięki za sugestie.
MLu,
1
Całkowicie się z tobą zgadzam @MLu, powtarzanie nigdy nie jest zabawne. Jednak z mojego doświadczenia z CloudFormation jesteś czasami zmuszony do powtarzania się. Innym rozwiązaniem, które widzę, jest tworzenie zastępstw, które uwzględnisz w warunkach, o których wspomniałem powyżej, a następnie w tych zastępstwach robisz rzeczy specyficzne dla tego stanu.
Bazze